4.4. Оператор цикла с перечислением ("for")

Оператор цикла "for" имеет структуру:

for имя [in список значений]

do

список команд

done

где "for" - служебное слово определяющее тип цикла,

"do" и "done" - служебные слова, выделяющие тело цикла.

Пусть команда "lsort" представлена командным файлом

for i in file_1 file_2 file_3

do

proc_sort $i

done

В этом примере имя "i" играет роль параметра цикла. Это имя можно рассматривать

как shell-переменную, которой последовательно присваиваются перечисленные

значения (i=file_1, i=file_2, i=file_3), и выполняется в цикле команда

"proc_sort".

Часто используется форма "for i in *", означающая "для всех файлов текущего

каталога".

Пусть "proc_sort" в свою очередь представляется командным файлом

cat $1 sort tee /dev/lp > ${1}_sorted

т.е. последовательно сортируются указанные файлы, результаты сортировки

выводятся на печать ("/dev/lp") и направляются в файлы file_1_sorted

file_2_sorted и file_3_sorted

4.5. Оператор цикла с истинным условием ("while")

Структура "while", также обеспечивающая выполнение расчетов, предпочтительнее

тогда, когда неизвестен заранее точный список значений параметров или этот

список должен быть получен в результате вычислений в цикле.

Оператор цикла "while" имеет структуру:

while условие

do

список команд

done

где "while" - служебное слово определяющее тип цикла с истинным условием. Список

команд в теле цикла (между "do" и "done") повторяется до тех пор, пока

сохраняется истинность условия (т.е. код завершения последней команды в теле

цикла равен "0") или цикл не будет прерван изнутри специальными командами

("break", "continue" или "exit"). При первом входе в цикл условие должно

выполняться.

Команда "break [n]" позволяет выходить из цикла. Если "n" отсутствует, то это

эквивалентно "break 1". "n" указывает число вложенных циклов, из которых надо

выйти, например, "break 3" - выход из трех вложенных циклов.

В отличие от команды "break" команда "continue [n]" лишь прекращает выполнение

текущего цикла и возвращает на НАЧАЛО цикла. Она также может быть с параметром.

Например, "continue 2" означает выход на начало второго (если считать из

глубины) вложенного цикла.

Команда "exit [n]" позволяет выйти вообще из процедуры с кодом возврата "0" или

"n" (если параметр "n" указан). Эта команда может использоваться не только в

циклах. Даже в линейной последовательности команд она может быть полезна при

отладке, чтобы прекратит выполнение (текущего) расчета в заданной точке.

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" из командного файла.


Информация о работе «Программирование на Shell»
Раздел: Информатика, программирование
Количество знаков с пробелами: 39235
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
89611
3
4

... не зависимый от языка способ создания кода и привязки его к запросам Web-страниц, — .NET Web Forms — управляемую событиями программную модель взаимодействия с элементами управления. Она дела­ет программирование Web-страниц аналогичным программи­рованию форм Visual Basic. ASP.NET содержит развитые сред­ства управления сеансами и функции защиты. Она надежнее, и производительность ее значительно выше ...

Скачать
9700
0
0

... "проверки заразности" (taint checks) в Perl? Как их включить? Как мы видели, одна из наиболее часто встречающихся проблем с безопасностью при программировании CGI - передача оболочке ОС пользовательских переменных без их проверки. Perl предлагает механизм проверки "заразности", который не позволяет этого делать. Любая переменная, которая проинициирована данными за пределами программы (включая ...

Скачать
43471
0
3

льный для каждого маршрута): "c: Курсовая моя < название маршрута > .txt" В таких файлах информация представлена например в следующем виде: автобус, 512 водитель, Батуров П.П. кондуктор, Иванова И.И. автобус, 513 водитель, Рябова Т.И. кондуктор, Шишкова Ю.М. автобус, 514 водитель, Продидж Н.Н. кондуктор, Мартысюк С.С. остановка, , 405, 4680 остановка, , 915, 2730 остановка, , ...

Скачать
374863
43
0

... интерфеса и интерфейса локольной сети ·     Предложение о выборе вариантов загрузки При этом возможен вариант запгрузки как с SCSI устройства (диск, CDROM, лента, …) так и через локальную сеть. Загрузочный диск должен быть предварительно сконфигурирован. Так как обьем Boot ROM не может быть большим, в его задачи входит загрузка вторичного загрузчика ...

0 комментариев


Наверх