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 " прекращает выполнение цикла.

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

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

:

Ничего не делает. Возвращает значение "0".".

Функции в shell

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

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

Имя()

{

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

}

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

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

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

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

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

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

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

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

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

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

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

 

 

 

 

ЛИТЕРАТУРА

 

1. https://www.citforum.ru/ftp/pub/os/shell-win.zip - Интерпритатор командного языка Shell

2. https://www.citforum.ru/ftp/pub/os/manpages-win.zip – Man Pages на русском

3. https://www.citforum.ru/ftp/pub/os/handbook-win.zip - Free BSD Hand Book руководство пользователя.


[1] Символ “ < ” определяет направление ввода-вывода смотри пункт 3.3.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2021-04-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: