Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #51, ФЕВРАЛЬ 2005 г.

Шелл для кодера

Андрей Семенюченко

Спецвыпуск: Хакер, номер #051, стр. 051-082-4


И теперь просто проверяешь, запущен ли демон, и только в этом случае создашь файл, содержащийся в переменной LOCKFILE, который необходим для работы демона.

С функцией stop() все абсолютно то же самое. Проверяешь, действительно ли запущен демон, и если все благополучно, вызываешь команду Killproc, которая убивает демона. И подчищаешь созданные ранее файлы.

Функция restart() поочередно вызывает функции start() и stop(), чтобы перезапустить демон.

Ниже в файле расположен оператор выбора case, который выполняет тот или иной участок кода согласно заданным условиям. Иногда case называют блоком операторов, поскольку его можно представить в качестве большого количества операторов проверки условия if, then, else. В нашем случае проверяется значение переменной $1, которое представляет собой не что иное, как первый параметр, передающийся скрипту. Например, если в командной строке набрать anacron start, выполнится условие start, которое вызовет функцию start() и запустит демон. Блок case завершает ключевое слово esac.

Отладка shell-сценариев

Нужно признаться, что до выхода последней версии (bash 3.0) командный интерпретатор bash не имел своего отладчика и даже каких-либо отладочных команд, возможно, за исключением команды Trap, которая устанавливает ловушки на сигналы, то есть определяет, какие действия нужно выполнить при получении сигнала. Формат команды Trap следующий:

trap [-lp] [arg] [sigspec ...]

Команда Arg выполняется при получении командным интерпретатором указанных сигналов sigspec. Если указана опция -p, выдаются команды Trap, связанные с каждым из перечисленных сигналов. Опция -l приводит к выдаче списка имен сигналов и соответствующих им номеров. Сигнал можно задавать как по имени, определенному в файле <signal.h>, так и по номеру. Если в качестве сигнала указано DEBUG, команда Arg выполняется после каждой простой команды. Trap возвращает 0 в случае успеха, в противном случае -1.

Могут пригодиться некоторые команды, которые, казалось бы, к отладке не имеют никакого отношения. Например - команда Echo, которая умеет выводить значения переменных в процессе выполнения скрипта.

А если хочешь чего-то более продвинутого, то в целях отладки можешь воспользоваться командой Tee и функцией assert(). Tee проверяет процессы и потоки данных в опасных ситуациях, а функция assert() служит для проверки переменных и условий в указанных точках сценария.

Конечно же, ты помнишь, что скрипт можно запустить строкой вида:

bash my_script_name

Если интерпретатору передать аргументы –n, -v или -x перед именем сценария, можно еще и получить некоторую полезную информацию. Ключ –n проверяет наличие синтаксических ошибок не запуская сам скрипт, ключ –v выводит каждую команду до того как она будет выполнена, –x показывает результаты выполнения команд.

Например, если добавить любую некорректно сформированную строку в данный скрипт так, чтобы он не мог запуститься из-за синтаксической ошибки. Я просто добавил выражение "This is error for test" сразу после объявления функции start(). Теперь запустим его следующим образом:

Назад на стр. 051-082-3  Содержание  Вперед на стр. 051-082-5