Программирование на Shell (Unix)


ПРОГРАММНЫЕ СТРУКТУРЫ - часть 10


5.7. Пустой оператор

Пустой оператор имеет формат

:

Ничего не делает. Возвращает значение "0". Например, в конструкции "while :" или ставить в начале командного файла, чтобы гарантировать, что файл не будет принят за выполняемый файл для "csh".

5.8. Функции в shell

Функция позволяет подготовить список команд shell для последующего выполнения.

Описание функции имеет вид:

имя() { список команд }

после чего обращение к функции происходит по имени. При выполнении функции не создается нового процесса. Она выполняется в среде соответствующего процесса. Аргументы функции становятся ее позиционными параметрами; имя функции - ее нулевой параметр. Прервать выполнение функции можно оператором "return [n]", где (необязательное) "n" - код возврата.

Пример. Вызов на выполнение файла "fun"

echo $$ fn() # описание функции { echo xx=$xx echo $# echo $0: $$ $1 $2 xx=yy ; echo xx=$xx return 5 } xx=xx ; echo xx=$xx fn a b # вызов функции "fn" с параметрами echo $? echo xx=$xx

содержащего описание и вызов функции "fn", выдаст на экран:

749 xx=xx xx=xx 2 fun: 749 a b xx=yy 5 xx=yy

5.9. Обработка прерываний ("trap")

Бывает необходимо защитить выполнение программы от прерывания.

Наиболее часто приходится встречаться со следующими прерываниями, соответствующими сигналам:

0 выход из интерпретатора,
1 отбой (отключение удаленного абонента),
2 прерывание от <Del>,
9 уничтожение (не перехватывается),
15 окончание выполнения.

Для защиты от прерываний существует команда "trap", имеющая формат:

trap 'список команд' сигналы

Если в системе возникнут прерывания, чьи сигналы перечислены через пробел в "сигналы", то будет выполнен "список команд", после чего (если в списке команд не была выполнена команда "exit") управление вернется в точку прерывания и продолжится выполнение командного файла.

Например, если перед прекращением по прерываниям выполнения какого то командного файла необходимо удалить файлы в "/tmp", то это может быть выполнено командой "trap":

tarp 'rm /tmp/* ; exit 1' 1 2 15

которая предшествует прочим командам файла. Здесь, после удаления файлов будет осуществлен выход "exit" из командного файла.

Команда "trap" позволяет и просто игнорировать прерывания, если "список команд" пустой. Так например, если команда "cmd" выполняется очень долго, а пользователь решил отключиться от системы, то для продолжения выполнения этой команды можно написать, запустив команду в фоновом режиме:

( trap '' 1; cmd )&

[Назад] [Содержание] [Вперед]




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



Книжный магазин