Программирование на языке SHELL (OS UNIX)Рефераты >> Программирование и компьютеры >> Программирование на языке SHELL (OS UNIX)
4.6. Оператор цикла с ложным условием ("until")
Оператор цикла "until" имеет структуру:
until условие
do
список команд
done
где "until" - служебное слово определяющее тип цикла с ложным условием. Список команд в теле цикла (между "do" и "done") повторяется до тех пор, пока сохраняется ложность условия или цикл не будет прерван изнутри специальными командами ("break", "continue" или "exit"). При первом входе в цикл условие не должно выполняться.
Отличие от оператора "while" состоит в том, что условие цикла проверяется на ложность (на ненулевой код завершения последней команды тела цикла) проверяется ПОСЛЕ каждого (в том числе и первого!) выполнения команд тела цикла.
Пример.
until false
do
read x
if [ $x = 5 ]
then echo enough ; break
else echo some more
fi
done
Здесь программа с бесконечным циклом ждет ввода слов (повторяя на экране фразу "some more"), пока не будет введено "5". После этого выдается "enough" и команда "break" прекращает выполнение цикла.
4.7. Пустой оператор
Пустой оператор имеет формат
:
Ничего не делает. Возвращает значение "0".".
4.8. Функции в shell
Функция позволяет подготовить список команд shell для последующего выполнения.
Описание функции имеет вид:
имя()
{
список команд
}
после чего обращение к функции происходит по имени. При выполнении функции не создается нового процесса. Она выполняется в среде соответствующего процесса. Аргументы функции становятся ее позиционными параметрами; имя функции - ее нулевой параметр. Прервать выполнение функции можно оператором "return [n]", где (необязательное) "n" - код возврата.
4.9. Обработка прерываний ("trap")
Бывает необходимо защитить выполнение программы от прерывания.
Наиболее часто приходится встречаться со следующими прерываниями, соответствующими сигналам:
0 |
выход из интерпретатора, |
1 |
отбой (отключение удаленного абонента), |
2 |
прерывание от <Del>, |
9 |
уничтожение (не перехватывается), |
15 |
окончание выполнения. |
Для защиты от прерываний существует команда "trap", имеющая формат:
trap 'список команд' сигналы
Если в системе возникнут прерывания, чьи сигналы перечислены через пробел в "сигналы", то будет выполнен "список команд", после чего (если в списке команд не была выполнена команда "exit") управление вернется в точку прерывания и продолжится выполнение командного файла.
Например, если перед прекращением по прерываниям выполнения какого то командного файла необходимо удалить файлы в "/tmp", то это может быть выполнено командой "trap":
tarp 'rm /tmp/* ; exit 1' 1 2 15
которая предшествует прочим командам файла. Здесь, после удаления файлов будет осуществлен выход "exit" из командного файла.
5. ЛИТЕРАТУРА
1. http://www.citforum.ru/ftp/pub/os/shell-win.zip - Интерпритатор командного языка Shell
2. http://www.citforum.ru/ftp/pub/os/manpages-win.zip – Man Pages на русском
3. http://www.citforum.ru/ftp/pub/os/handbook-win.zip - Free BSD Hand Book руководство пользователя.
[1] Символ “<” определяет направление ввода-вывода смотри пункт 3.3.