| Advanced Bash-Scripting Guide: Искусство программирования на языке сценариев командной оболочки | ||
|---|---|---|
| Назад | Вперед | |
Необязательные параметры -- это дополнительные ключи (опции), которые оказывают влияние на поведение сценария и/или командной оболочки.
Команда set позволяет задавать дополнительные опции прямо внутри сценария. В том месте сценария, где необходимо, чтобы та или иная опция вступила в силу, вставьте такую конструкцию set -o option-name, или в более короткой форме -- set -option-abbrev. Эти две формы записи совершенно идентичны по своему действию.
#!/bin/bash
set -o verbose
# Вывод команд перед их исполнением.
#!/bin/bash
set -v
# Имеет тот же эффект, что и выше.

Для того, чтобы отключить действие той или иной опции,
следует вставить конструкцию set +o option-name, или set +option-abbrev.
#!/bin/bash
set -o verbose
# Вывод команд перед их исполнением.
command
...
command
set +o verbose
# Запретить вывод команд перед их исполнением.
command
# команда не выводится.
set -v
# Вывод команд перед их исполнением.
command
...
command
set +v
# Запретить вывод команд перед их исполнением.
command
exit 0
Как вариант установки опций, можно предложить указывать их в
заголовке сценария (в строке sha-bang) -- #!.
#!/bin/bash -x
#
# Далее следует текст сценария.
Так же можно указывать дополнительные ключи в командной
строке, при запуске сценария. Некоторые из опций работают только
если они заданы из командной строки, например -i -- ключ интерактивного
режима работы скрипта.
bash -v script-name
bash -o verbose
script-name
Ниже приводится список некоторых полезных опций, которые могут
быть указаны как в полной форме так и в сокращенной.
Таблица 30-1. Ключи Bash
Краткое имя
Полное имя
Описание
-C
noclobber
Предотвращает перезапись файла в операциях
перенаправления вывода (не распространяется на конвейеры
(каналы) -- >|)
-D
(нет)
Выводит список строк в двойных кавычках,
которым предшествует символ $, сам сценарий не исполняется
-a
allexport
Экспорт всех, определенных в сценарии,
переменных
-b
notify
Выводит уведомление по завершении фоновой
задачи (job) (довольно редко используется в
сценариях)
-c ...
(нет)
Читает команды из ...
-f
noglob
Подстановка имен файлов (globbing)
запрещена
-i
interactive
Сценарий запускается в интерактивном режиме
-p
privileged
Сценарий запускается как "suid" (осторожно!)
-r
restricted
Сценарий запускается в ограниченном режиме (см. Глава 20).
-u
nounset
При попытке обращения к неопределенным
переменным, выдает сообщение об ошибке и прерывает работу
сценария
-v
verbose
Выводит на stdout каждую команду прежде, чем
она будет исполнена
-x
xtrace
Подобна -v, но выполняет подстановку
команд
-e
errexit
Прерывает работу сценария при появлении
первой же ошибки (когда команда возвращает ненулевой код
завершения)
-n
noexec
Читает команды из сценария, но не исполняет
их (проверка синтаксиса)
-s
stdin
Читает команды с устройства stdin
-t
(нет)
Выход после исполнения первой команды
-
(нет)
Конец списка ключей (опций), последующие
аргументы будут восприниматься как позиционные
параметры.
--
(нет)
Эквивалент предыдущей опции (-).