Команды
Командный арсенал оболочки bash является средством автоматизации и позволяет успешно писать простые сценарии, иначе системным администраторам пришлось бы вручную вводить команды в командную строку. Опыт использования командных строк необходим для создания bash-сценариев (и наоборот). При превышении объема в сотню строк в bash-сценарии или необходимости применения средств, которыми bash не обладает, рекомендуется переходить к языкам программирования Perl или Python.
В среде bash комментарии начинаются со знака "#" и продолжаются до конца строки. Как и в командной строке, можно разбить одну логическую строку на несколько физических строк, обозначив переход на новую строку символом обратной косой черты \. И, наоборот, можно поместить на одной строке несколько операторов, разделив их точкой с запятой.
Сценарий для оболочки bash может состоять только из последовательности командных строк. Например, следующий сценарий helloworld просто выполняет команду echo.
#!/bin/bash
echo "Hello, world!"
Первая строка содержит описательный оператор, который сообщает, что данный текстовый файл является сценарием, предназначенным для интерпретации командной оболочкой /bin/bash. При принятии решения о том, как выполнить этот файл, ядро отыщет соответствующий синтаксис. С точки зрения оболочки, выполняющей этот сценарий, первая строка представляет собой простой комментарий. Если бы оболочка находилась в другом каталоге, пришлось бы изменить эту строку.
Для того чтобы подготовить файл сценария к выполнению, достаточно установить его атрибут, отвечающий за выполнение:
$ chmod +х helloworld
$./helloworld
Hello, world!
Если оболочка понимает команду helloworld без префикса ./, это означает, что в пути поиска указан текущий каталог .. И это небезопасный вариант, поскольку дает другим пользователям возможность устраивать “ловушки” при попытке выполнения определенных команд при переходе к каталогу, в котором они имеют доступ для записи.
Можно также непосредственно запустить (активизировать) оболочку в качестве интерпретатора сценария:
$ bash helloworld
Hello, world!
$ source helloworld
Hello, world!
Первая команда выполнит сценарий helloworld в новом экземпляре оболочки bash, а вторая заставит начальную оболочку прочитать содержимое файла, а затем выполнить его. Второй вариант полезен в случае, если сценарий устанавливает переменные среды или выполняет другие операции настройки, применимые только к текущей оболочке. Обычно этот вариант используется при написании сценариев, включающих содержимое файла конфигурации, написанного в виде ряда присваиваний значений bash-переменным.
По опыту работы с Windows привычнее использовать понятие расширения файла, по которому можно судить о типе файла, а также о том, можно ли его выполнить. В ОС признак того, может ли файл быть выполнен и кем именно, содержится в специальных битах полномочий. При желании можно наделить bash-сценарии суффиксом .sh, который бы будет сообщать о типе, но при выполнении соответствующей команды потребует вводить суффикс .sh, так как в ОС расширения не интерпретируются специальным образом.