В статье рассмотрим, что такое Bash, области применения bash-скриптов, также покажем, как написать и запустить простой bash-скрипт.
Введение
Bash — одна из наиболее популярных командных оболочек в операционных системах семейства *nix: Linux, Unix и других.
Unix — семейство многозадачных и многопользовательских компьютерных операционных систем. Они имеют модульную архитектуру: ОС предоставляет набор простых инструментов, каждый из которых выполняет ограниченную функцию. Этот подход иногда называют философией Unix. Unix-подобная (иногда их называют UN*X- или *nix-системы) операционная система сходна по некоторым свойствам с системами семейства UNIX, но не обязательно соответствует Единой спецификации Unix. |
Bash исполняет в операционной системе несколько ролей и функций:
Роль | Функция |
1. Оболочка операционной системы | Предоставляет пользователю интерфейс для взаимодействия с функциями системы |
2. Интерпретатор командной строки | Интерпретирует (распознаёт и исполняет) команды, вводимые пользователем в CLI |
3. Язык для составления команд и сценариев (скриптов) | Устанавливает правила, определяющие внешний вид программы и действия, которые выполнит компьютер |
Интерфейс командной строки (Command line interface, CLI), или консоль, позволяет человеку взаимодействовать с компьютером путём отправки текстовых команд заданного формата. Консоль противопоставляется системам управления на основе меню и графического интерфейса.
Графический интерфейс пользователя (GUI, Graphical User Interface) позволяет пользователю взаимодействовать с системой через графические элементы на экране.
В эмуляторе терминала вводят команды bash и их последовательности, а также запускают для исполнения скрипты с линейной или нелинейной (например, с циклами или условиями) структурой.
Эмулятор терминала отображает видеотерминал внутри другой системы отображения: например, внутри графического интерфейса пользователя. В нём можно работать с CLI и другими текстовыми интерфейсами. Эмулятор можно запускать как на той же машине, так и на удалённых серверах, соединяясь с ними при помощи утилит telnet, ssh и т. д. |
История оболочек
Первая оболочка для UNIX под названием V6 появилась в 1971 году. У неё были следующие особенности:
- для работы с шаблонами поиска предназначалась отдельная утилита glob, для работы с условиями — команда if;
- компактный синтаксис (при помощи операторов <, >, >>, |) позволял перенаправлять ввод и вывод от одной команды к другой;
- предусматривалось последовательное выполнение нескольких программ или утилит в одной команде (с помощью оператора ;) и асинхронных команд (с помощью оператора &);
- возможность составления скриптов отсутствовала.
В 1977 Стивен Борн создал оболочку Bourne (или sh), добавив, в частности, возможность создания скриптов. Bourne стала основой для дальнейших версий оболочек: Korn shell (ksh), Almquist shell (ash), Bourne Again Shell (bash) и многих других.
Оболочка bash была создана в 1987 году. Название bash — акроним Bourne Again Shell (игра слов Bourne Again Shell, снова оболочка Борна — born-again Shell, возрождённая оболочка). Сегодня она используется в качестве оболочки по умолчанию в большинстве дистрибутивов Linux.
На рисунке ниже представлена история появления основных оболочек.
Сегодня в различных дистрибутивах *NIX-систем по умолчанию используются следующие оболочки:
Название | Год выпуска | Дистрибутивы, в которых оболочка используется по умолчанию |
С shell (csh) | 1978 | FreeBSD (вариация tcsh) |
Korn shell (ksh) | 1983 | Проприетарные системы семейства UNIX (Solaris, HP-UX, AIX), OpenBSD |
GNU Bash | 1988 | Операционные системы на основе Linux для настольных компьютеров. Существуют версии bash для Microsoft Windows |
Almquist shell (ash) | 1989 | Исполнение скриптов в Debian и Ubuntu (вариация от Debian — dash) |
Z shell (z sh) | 1990 | Mac OS, Kali Linux |
Что такое bash-скрипт
Скрипт на языке bash — это файл с последовательностью команд, которые автоматически построчно выполняются интерпретатором bash. В скриптах используются те же команды, которые пользователь мог бы вводить в командной строке самостоятельно по отдельности, одну за другой: для перехода в каталоги, создания и удаления каталогов и файлов, поиска и обработки текста.
Готовый скрипт можно запускать либо вручную, когда это требуется, либо по расписанию. Чтобы автоматизировать запуск скрипта, нужно включить его в задания для cron
— службы для выполнения заданий в определённое время либо с заданной периодичностью. Поэтому bash-скрипты — удобный способ автоматизировать выполнение регулярных задач.
Области применения bash-скриптов
Скрипты полезны как при администрировании систем семейств Linux и Unix, так и в повседневной работе с этими системами. Кроме того, знание языка bash поможет разобраться в скриптах других авторов и адаптировать их с учётом личных требований.
Где рекомендуется применять
- Работа с содержимым файлов: поиск файлов, фрагментов текста, преобразование текста, запись изменённого содержимого в новые файлы.
- Регулярно выполняемые задачи, например, резервное копирование — путём архивирования определённых каталогов, или освобождение дискового пространства — путём удаления старых логов и временных файлов.
Где неэффективно применять
- Для ресурсоемких задач, особенно когда важна скорость исполнения — например, поиск и сортировка в больших массивах данных.
- Когда необходим графический интерфейс (GUI) — например, для отображения видео.
Bash для разработчика
Использование bash вместо графического интерфейса экономит ресурсы компьютера, так как они не тратятся на отображение графики. Поэтому bash — предпочтительный выбор, если у вас запущено несколько требовательных к ресурсам программ, работает виртуальная машина или ограничены вычислительные ресурсы.
Многие IT-специалисты, от дата-аналитика до бэкенд-разработчика, обычно используют несколько языков программирования и часто — несколько IDE. При помощи bash можно централизованно запускать скрипты на разных языках, чтобы они могли эффективно взаимодействовать друг с другом.
Например, с помощью bash можно:
- выполнить запрос к базе данных с помощью SQL;
- использовать результаты для проведения анализа в R;
- использовать полученные результаты в качестве входных данных для скрипта на Python.
В bash вы можете работать с любым языком программирования, установленном на компьютере.
Редакторы
Писать скрипты можно в любом удобном текстовом редакторе — например, в том, который встроен в ваш дистрибутив Linux по умолчанию.
Вот некоторые из таких редакторов:
- nano
Консольный редактор, есть во многих дистрибутивах Linux, включая варианты без графического окружения. Самый простой в освоении из консольных редакторов — внизу экрана есть подсказки с сочетаниями клавиш для выполнения основных действий.
- vim
Консольный редактор, есть в большинстве дистрибутивов. Для заучивания сочетаний клавиш потребуется время, но многие ценят этот редактор за возможность выполнять действия с текстом несколькими нажатиями клавиш: например, yy
— скопировать текущую строку, p
— вставить её строкой ниже.
Текстовый редактор VIM — краткое руководство.
- gedit
Редактор с минималистичным графическим интерфейсом, включён в дистрибутивы на основе Ubuntu.
Во всех перечисленных редакторах автоматически подсвечивается синтаксис в соответствии с языком скрипта (типом файла), если у файла есть соответствующее расширение — для bash-скрипта это расширение .sh
.
Создание и запуск скрипта
Убедитесь, что работаете не под учётной записью root (суперпользователя): у неё есть полномочия на выполнение многих команд, которыми можно случайно повредить систему — например, на удаление системных каталогов. Рекомендуется работать под учётной записью непривилегированного пользователя.
У такого пользователя приглашение к вводу команд выглядит примерно так:
username ~$
Тильда ~ означает, что пользователь находится в своём домашнем каталоге
/home/username
.У суперпользователя (root) приглашение к вводу команд выглядит так:
root ~#
В этой статье строки с командами будут выглядеть так:
$ commandname
Выделенный жирным символ $ — приглашение, далее — текст команды.
Сначала нужно выяснить, в какой оболочке работает текущий пользователь. Для этого введите в командной строке bash следующую команду:
$ echo $SHELL
Выводимый результат:
/bin/bash
В результате выполнения команды мы узнаём, что оболочка по умолчанию у текущего пользователя — bash.
Затем рекомендуется перейти в домашний каталог пользователя, /home — в нём запускать скрипты будет безопаснее всего:
$ cd
Это команда смены каталога — сокращение от
change directory
. Обычно после командыcd
указывают каталог назначения, а если он не указан, каталог меняется на/home
.Запустите команду pwd, указывающую текущий каталог, чтобы убедиться, что вы находитесь в /home:
$ pwd
Выводимый результат:
/home/username
, где username — учётная запись, под которой вы работаете.На нахождение в домашнем каталоге указывает ещё тильда ~ перед символом $, но она отображается не во всех вариантах оформления оболочки.
Создайте файл в текстовом редакторе — например,
nano:
$ nano homefiles.sh
В *NIX-системах файл скрипта на любом интерпретируемом языке программирования рекомендуется начинать с последовательности
#!
, которая называется shebang. За этими символами указывают путь к интерпретатору, который система будет использовать для исполнения скрипта. Без строки shebang скрипт может выполняться не совсем так, как задумано, если оболочка по умолчанию — не bash.В данном случае нужно указать в первой строке (перед ней не должно быть пустых строк) такой shebang:
#!/bin/bash
Обратите внимание: после символов
#!
должен быть указан правильный путь к интерпретатору, в нашем случае — указанный выше в п. 2:/bin/bash
Иначе будет выведено сообщение об ошибке:
Command not found
.Законченный скрипт homefiles.sh выглядит так:
#!/bin/bash cd /home/$USER ls -lat >> homefiles.txt tail -5 homefiles.txt
Здесь выполняются следующие действия:
1) Перейти в домашний каталог пользователя.
2) Отобразить список файлов в нём, упорядочив их по времени создания.
3) Сохранить этот список в файле
homefiles.txt
4) Отобразить последние пять строк файла
homefiles.txt
Сохраните скрипт. В редакторе nano для этого нужно выполнить следующие действия:
1) Нажмите
Ctrl+Х
, чтобы инициировать выход из программы.2) В ответ на вопрос: Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES)? (Сохранить изменения, сохранённые в буфере обмена? Если ответить Нет, изменения будут удалены.) нажмите клавишу Y.
3) В ответ на предложение: File Name to Write: homefiles.sh (Сохранить файл под названием: homefiles.sh) нажмите клавишу Enter.
Чтобы скрипт можно было запустить, нужно сделать его исполняемым.
Для этого введите следующую команду:
$ chmod +x homefiles.sh
Команда
chmod
позволяет владельцу файла и суперпользователю изменять права доступа к файлам — виды действий, которые те или иные пользователи могут с ним совершать.+х
— включение так называемого бита исполнения, метки о разрешении исполнять файл, которую команда chmod устанавливает для файла.Для запуска скрипта введите в командной строке команду:
./homefiles.sh
- При успешном выполнении скрипта отобразятся последние пять строк файла
homefiles.txt
:
Заключение
Уметь читать и составлять скрипты на языке bash полезно как для решения задач разработчика, так и в повседневной работе с этими системами. Скрипты упрощают выполнение регулярных задач, содержание которых не меняется.