Понятие о сценариях оболочки

Сценарии оболочки, или скрипты, — самый эффективный способ автоматизации работы в bash. Скрипты — обычные файлы в текстовом (ASCII) формате, содержание которыхсоставляет одна или несколько команд с их опциями и аргументами, при необходимости соединенные условными операторами. Скрипты являются прародителями bat-файлов в MS DOS, но позволяют реализовать значительно более широкий круг возможностей.

Сценарии оболочки очень широко применяются в Linux. Ими являются большинство конфигурационных файлов, как общесистемных, так и пользовательских, и многие прикладные программы. Кроме того, любой пользователь может создавать собственные сценарии в неограниченном количестве.

В качестве сценария можно сохранить любую часто используемую команду с ее опциями и аргументами, командную конструкцию, объединенную перенаправлением и (или) конвейеризацией, просто серию последовательно выполняемых команд.

Для этого достаточно сделать следующее:

•дать команду на создание файла, например cat > scr1

и нажать Enter

•ввести строку

#!/bin/sh

•перейти на новую строку и любым способом — набором с клавиатуры или копированием мышью, — ввести требуемую команду, серию последовательных команд (в одну или несколько строк) или командную конструкцию

command1 -options arguments command2 -options arguments

•перейти на новую строку (нажатием Enter|);

•завершить файл (нажатием Ctrl|+|~D~|);

•разрешить исполнение файла командой chmod.

Кратко прокомментируем эти действия. Первая строка идентифицирует сценарий оболочки. Символ # в оболочке bash (и большинстве другихслучаев) служит в принципе для обозначения комментария (аналогично комментарию rem в bat-файлах MS DOS). То есть символы, следующие в одной строке за ним, не рассматриваются как команды и не принимаются к исполнению, а служат исключительно внутренним целям, поясняя в необходимых случаях действия командныхдиректив. Если комментарий занимает более чем одну строку, каждая из нихдолжна начинаться с символа #.

Однако первая строка #!/bin/sh имеет иной смысл. Она указывает, что данный сценарий исполняется именно в Shell-совместимой оболочке и, если пользователь использует по умолчанию оболочку иного типа, предписывает запуск внутри нее оболочки sh (почему именно sh, а не, например, bash, будет сказано в одном из следующих разделов).

Ввод собственно команд понятен без комментариев, а вот на последнее действие следует обратить особое внимание. Все файлы в Linux имеют права доступа, разделяемые на права действия и права принадлежности (подробно об этом говорится в«Руководстве по администрированию»).Права действия включают в себя право на чтение файла (read, или r), его изменение (write, или w) и исполнение (execute, или x). Права эти могут принадлежать (права принадлежности) владельцам файла (owner, или в других случаях, user, u), членам одной из групп пользователей, в которые входит владелец (group, или g) и всем прочим (other, или o), а также им всем вместе (all, или a).

Пользовательский сценарий, который может быть запущен как команда, отличается от просто текстового файла только правом на исполнение.

Команда chmod (от change mode) и служит для изменения прав доступа к файлам.

Чтобы сделать созданный сценарий доступным для исполнения его создателем (а по умолчанию он является обычно и хозяином файла, owner или user, автоматически имеющим права чтения и записи в отношении него), команда эта дается виде

chmod u+x scr1

Аргумент команды — это имя нашего скрипта, смысл опций следующий:

•первая опция указывает на принадлежность того, для кого изменяются права доступа; в данном случае это user (u) — владелец файла;

•следующая опция — это характер изменения прав; нетрудно догадаться, что + означает присвоить право, - отнять его; в данном случае некое право в отношении файла присваивается;

•наконец, последняя опция — это именно то самое изменяемое командой право доступа, в данном случае — право на исполнение (x).

Одной командой chmod можно присвоить сразу несколько прав действия и принадлежности. Так, команда

chmod ugo+rx scrl

устанавливает право не только исполнять (х), но и читать (г) исходный текст созданного сценария не только его владельцу (и, который право на чтение имеет по умолчанию), но и членам его группы (д, для которыхправо чтения обычно также устанавливается по умолчанию), но и другим пользователям (о).

Можно также одной командой присвоить все возможные права действия и принадлежности в отношении сценария:

chmod a+rwx scrl

где a (all) означает всех пользователей по принадлежности, г, w и х — права на чтение, запись и исполнение, соответственно (порядок опций, соответствующих отдельным правам как принадлежности, так и действия, может быть любым, но обычно приняты ugo и rwx).

Подчеркнем, что опции а и о в приведенных примерах не эквивалентны: а есть совокупность прав принадлежности владельцу, группе и прочим, под которыми подразумеваются все пользователи, не являющиеся владельцами файла и не входящие в группу пользователей, к которой приписан файл. И потому командой

chmod g-rwx scrl

можно отнять все права у группы пользователей, сохранив их для себя и всех, в эту группу не входящих. Впрочем, и об этом подробно рассказывается в«Руководстве по администрированию.»

Установкой соответствующих прав доступа создание сценария завершается.

Остается только поместить его в подходящий каталог из числа определенных переменной окружения $РАТН, например, в $HOME/bin. И теперь сценарий можно запустить, набрав в командной строке короткую и мнемонически прозрачную последовательность символов вместо сложной последовательности команд, их опций и аргументов.

Разумеется, внутри сценария могут использоваться любые командные конструкции с перенаправлением ввода/вывода и конвейеризацией, а также условные операторы типа if ... then ... fi, if ... then ... else ... fi. Однако программирование сценариев оболочки — отдельная тема, которой посвящено большое количество источников информации (см. заключение).

Еще материалы по теме: