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


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


for i in /var/lock/subsys/*; do # --> Стандартный заголовок цикла for/in, но, поскольку "do" # --> находится в той же самой строке, что и for, # --> необходимо разделить их символом ";". # Проверяется наличие сценария. [ ! -f $i ] && continue # --> Очень интересное использование "И-списка", эквивалентно: # --> if [ ! -f "$i" ]; then continue

# Получить имя подсистемы. subsys=${i#/var/lock/subsys/} # --> В данном случае совпадает с именем файла. # --> Это точный эквивалент subsys=`basename $i`.

# --> Таким образом получается имя файла блокировки (если он присутствует, # -->+ то это означает, что процесс запущен). # --> См. описание команды "lockfile" выше.

# Остановить службу. if [ -f /etc/rc.d/init.d/$subsys.init ]; then /etc/rc.d/init.d/$subsys.init stop else /etc/rc.d/init.d/$subsys stop # --> Останавливает задачу или демона # --> посредством встроенной команды 'stop'. fi done

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

Упражнение 1. Просмотрите сценарий halt в каталоге /etc/rc.d/init.d. Он по размеру немного больше, чем killall, но придерживается той же концепции. Создайте копию этого сценария в своем домашнем каталоге и поэкспериментируйте с ним (НЕ запускайте его с привилегиями суперпользователя). Попробуйте запустить его с ключами -vn (sh -vn scriptname). Добавьте свои комментарии. Замените действующие команды на "echo".

Упражнение 2. Просмотрите другие, более сложные сценарии из /etc/rc.d/init.d. Попробуйте разобраться в их работе. Проверьте их работу, следуя рекомендациям, приведенным выше. За дополнительной информацией вы можете обратиться к документу sysvinitfiles в каталоге /usr/share/doc/initscripts-?.??, который входит в пакет документации к "initscripts".

Глава 14. Подстановка команд

Подстановка команд -- это подстановка результатов выполнения команды [43] или даже серии команд; буквально, эта операция позволяет вызвать команду в другом окружении.




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