Сценарии оболочки
Сценарий оболочки представляет собой текстовый файл, содержащий про- грамму, состоящую из системных и встроенных команд. Они предназначены для автоматизации выполнения задач, чаще всего связанных с администри- рованием.
Оболочка последовательно интерпретирует и выполняет команды, заданные в сценарии. Эти же команды могут быть выполнены простым последователь- ным вызовом их в командной строке оболочки.
Для файлов сценариев оболочки Bash принято устанавливать расширение .sh.
Сценарии оболочки могут быть исполнены двумя различными путями.
r Имя файла сценария можно указать в качестве аргумента командной стро- ки при явном запуске исполняемого файла оболочки, например, bash. В этом случае файл сценария должен быть доступен для чтения.
r Если в сценарии содержится неявный вызов оболочки, а файл сценария доступен для чтения и исполнения, то сценарий можно запустить так же, как и обычные системные команды.
Далее приведен пример запуска сценария путем явного вызова оболочки и указания имени сценария в качестве аргумента (пример 10.1).
Пример 10.1. Запуск сценария с явным вызовом оболочки |
$ bash myscr1.sh Privet!
При отладке сценариев исключительно важны опции -v и -x bash. Опция
-v переводит оболочку в режим подробного информирования о работе. В этом режиме отображаются команды сценария перед их интерпретацией. Опция -x отображает результаты интерпретации команд. При неявном указа- нии оболочки в первой строке сценария должна находиться строка с полным именем исполняемого файла оболочки (пример 10.2).
Пример 10.2. Неявный вызов оболочки |
$ cat myscr1.sh
#!/bin/bash echo 'Privet!'
Строка #!/bin/bash указывает, с помощью какой оболочки должен быть ин- терпретирован и выполнен сценарий.
Запуск сценария при неявном вызове оболочки возможен, если на файл сце- нария имеются разрешения для чтения и исполнения (пример 10.3).
Пример 10.3. Установка прав на исполнение сценария |
$ chmod a+rx myscr1.sh
$ ./myscr1.sh Privet!
Обратите внимание на то, что нахождение исполняемого файла в текущем каталоге не означает возможности его запуска без указания пути к нему. При отсутствии имени текущего каталога в переменной PATH имя текущего ката- лога (точка) должно быть указано в пути к файлу сценария — ./.
Часто возникает необходимость в процессе исполнения сценария считать и исполнить содержимое другого файла сценария в контексте вызывающего сценария. Если просто вызвать сценарий из другого сценария, то вызывае- мый сценарий будет исполнен в собственной оболочке. Переменные, значе- ния которых были установлены в вызываемом сценарии, не будут известны в вызывающем сценарии.
При необходимости выполнения сценария в контексте вызывающего сцена- рия (оболочки) нужно использовать inline-подстановку (пример 10.4).
Пример 10.4. Использование inline-подстановки |
$ . .bashrc
Команда "точка" является inline-подстановкой. В примере 10.4 содержимое файла сценария .bashrc будет выполнено в контексте вызывающей оболочки.
Inline-подстановка часто используется для считывания в сценарии перемен- ных, заданных в другом файле (пример 10.5).
Пример 10.5. Установка значений переменных из файла |
$ cat myscr2rc VAR1='Snova Privet!'
$ cat myscr2.sh
#!/bin/bash
. myscr2rc echo $VAR1
$ ./myscr2.sh Snova Privet!
В примере 10.5 в коде сценария myscr2.sh была выполнена inline-подстановка содержимого файла myscr2rc, в котором была установлена переменная VAR1.
Дата добавления: 2015-06-12; просмотров: 1165;