# Если опция ожидает дополнительный аргумент ("flag:"), то следующий параметр
# в командной строке, будет воспринят как дополнительный аргумент этой опции.
if [ $# -eq "$NO_ARGS" ] # Сценарий вызван без аргументов?
echo "Порядок использования: `basename $0` options (-mnopqrs)"
exit $E_OPTERROR # Если аргументы отсутствуют -- выход с сообщением
# о порядке использования скрипта
# Порядок использования: scriptname -options
# Обратите внимание: дефис (-) обязателен
while getopts ":mnopq:rs" Option
m ) echo "Сценарий #1: ключ -m-";;
n | o ) echo "Сценарий #2: ключ -$Option-";;
p ) echo "Сценарий #3: ключ -p-";;
q ) echo "Сценарий #4: ключ -q-, с аргументом \"$OPTARG\"";;
# Обратите внимание: с ключом 'q' должен передаваться дополнительный аргумент,
# в противном случае отработает выбор "по-умолчанию".
r | s ) echo "Сценарий #5: ключ -$Option-"'';;
* ) echo "Выбран недопустимый ключ.";; # ПО-УМОЛЧАНИЮ
# Переход к очередному параметру командной строки.
Когда эта команда вызывается из командной строки, то это приводит к запуску указанного сценария. Внутри сценария, команда source file-name загружает файл file-name. Таким образом она очень напоминает директиву препроцессора языка C/C++ -- "#include". Может найти применение в ситуациях, когда несколько сценариев пользуются одним файлом с данными или библиотекой функций.
Пример 11-18. "Подключение" внешнего файла
. data-file # Загрузка файла с данными.
# Тот же эффект дает "source data-file", но этот вариант более переносим.
# Файл "data-file" должен находиться в текущем каталоге,
#+ т.к. путь к нему не указан.
# Теперь, выведем некоторые переменные из этого файла.
echo "variable1 (из data-file) = $variable1"
echo "variable3 (из data-file) = $variable3"
let "sum = $variable2 + $variable4"
echo "Сумма variable2 + variable4 (из data-file) = $sum"
echo "message1 (из data-file): \"$message1\""
# Обратите внимание: кавычки экранированы
print_message Вызвана функция вывода сообщений, находящаяся в data-file.
Файл data-file для Пример 11-18, представленного выше, должен находиться в том же каталоге.
# Этот файл подключается к сценарию.
# Подключаемые файлы могут содержать об"явления переменных, функций и т.п.
# Загружаться может командой 'source' или '.' .
# Инициализация некоторых переменных.
message1="Привет! Как поживаете?"
# Вывод сообщения переданного в эту функцию.
# Ошибка, если аргумент отсутствует.
# Цикл по всем аргументам функции.