Искусство программирования на языке сценариев командной оболочки


Программирование на языке сценариев командной оболочки - стр. 227


echo

exit 0

См. также Пример 31-1.

+

Смена текущего каталога в дочернем процессе (подоболочке) не влечет за собой смену текущего каталога в родительской оболочке.

Пример 19-2. Личные настройки пользователей

#!/bin/bash # allprofs.sh: вывод личных настроек (profiles) всех пользователей

# Автор: Heiner Steven # С некоторыми изменениями, внесенными автором документа.

FILE=.bashrc # Файл настроек пользователя, #+ в оригинальном сценарии называется ".profile".

for home in `awk -F: '{print $6}' /etc/passwd` do [ -d "$home" ] || continue # Перейти к следующей итерации, если нет домашнего каталога. [ -r "$home" ] || continue # Перейти к следующей итерации, если не доступен для чтения. (cd $home; [ -e $FILE ] && less $FILE) done

# По завершении сценария -- нет теобходимости выполнять команду 'cd', чтобы вернуться в первоначальный каталог, #+ поскольку 'cd $home' выполняется в подоболочке.

exit 0

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

COMMAND1 COMMAND2 COMMAND3 ( IFS=: PATH=/bin unset TERMINFO set -C shift 5 COMMAND4 COMMAND5 exit 3 # Выход только из подоболочки. ) # Изменение переменных окружения не коснется родительской оболочки. COMMAND6 COMMAND7

Как вариант использования подоболочки -- проверка переменных.

if (set -u; : $variable) 2> /dev/null then echo "Переменная определена." fi

# Можно сделать то же самое по другому: [[ ${variable-x} != x || ${variable-y} != y ]] # или [[ ${variable-x} != x$variable ]] # или [[ ${variable+x} = x ]])

Еще одно применение -- проверка файлов блокировки:

if (set -C; : > lock_file) 2> /dev/null then echo "Этот сценарий уже запущен другим пользователем." exit 65 fi

# Спасибо S.C.

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

Пример 19-3. Запуск нескольких процессов в подоболочках




- Начало -  - Назад -  - Вперед -