Книга: Искусство программирования на языке сценариев командной оболочки
Пример 13-8. Сценарий killall, из каталога /etc/rc.d/init.d
Пример 13-8. Сценарий killall, из каталога /etc/rc.d/init.d
#!/bin/sh
# --> Комментарии, начинающиеся с "# -->", добавлены автором документа.
# --> Этот сценарий является частью пакета 'rc'-сценариев
# --> Автор: Miquel van Smoorenburg, <[email protected]>
# --> Этот сценарий характерен для дистрибутива Red Hat
# --> (в других дистрибутивах может отсутствовать).
# Остановить все ненужные сервисы которые еще работают (собственно,
# их уже не должно быть, это лишь формальная проверка, на всякий случай)
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".
- Пример 13-1. Установка символа "забоя"
- Пример 13-2. невидимый пароль: Отключение эхо-вывода на терминал
- Пример 13-3.
- Пример 13-4. Использование команды pidof при остановке процесса
- Пример 13-5. Проверка образа CD
- Пример 13-6. Создание файловой системы в обычном файле
- Пример 13-7. Добавление нового жесткого диска
- Пример 13-8. Сценарий killall, из каталога /etc/rc.d/init.d
- Пример 13-1. Установка символа "забоя"
- Пример 13-8. Сценарий killall, из каталога
- Пример установочного скрипта
- Пример из практики
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Примеры получения статистики
- Пример применения метода «пять почему»
- Пример 12-8. Частота встречаемости отдельных слов
- 1.2.5. Пример программы
- Пример 17-10. Блочный комментарий
- Примеры
- 2. Пример создания базового отношения в записи на псевдокоде