Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС лабы / ОС - Лабораторная работа 3.doc
Скачиваний:
60
Добавлен:
01.06.2015
Размер:
469.5 Кб
Скачать
        1. Оператор if:

if список_команд1; then список_команд2; [ elif список_команд3; then список_команд4; ] ... [ else список_командN; ] fi

Здесь квадратные скобки – не символы языка shell, а указание на необязательные части оператора. Символы;можно опускать, если в данном месте выполняется переход на новую строку. Любой из списков может, разумеется, состоять из единственной команды.

Семантику оператора ifвряд ли нужно пояснять.

Оператор ifможет быть записан либо в одной строке, либо в нескольких строках скрипта. Конец строки синтаксически равнозначен символу;. Допускается (хотя вряд ли может принести большую пользу) использованиеifпри интерактивном вводе команд. Если пользователь не завершил ввод оператора в одной строке, то будет выдаваться вторичное приглашениеshell, пока пользователь не введетfi.

        1. Оператор while:

while список_команд1; do список_команд2; done

Здесь все очевидно. Внутри списка команд могут использоваться встроенные команды breakиcontinue(см. ниже)

        1. Оператор until:

until список_команд1; do список_команд2; done

Отличается от цикла whileтолько знаком проверяемого условия. Как и дляwhile, проверка выполняется до выполнения.

        1. Оператор case:

case слово in [ [(] шаблон1 [| шаблон2]...) список_команд ;;] ... esac

Несколько запутанное описание синтаксиса можно иллюстрировать следующим простым примером, позаимствованным из документации Linux. В этом примере переменнаяANIMALсодержит название животного, а кусок скрипта выдает на стандартный вывод фразу о количестве ног, например: “The man has two legs.

echo -n "The $ANIMAL has "

case $ANIMAL in

horse | dog | cat) echo -n "four";;

man | kangaroo ) echo -n "two";;

*) echo -n "an unknown number of";;

esac

echo " legs."

Значение заданного слова (в данном случае $ANIMAL) сравнивается по очереди с шаблонами, при этом знак|требует соответствия хотя бы одному из перечисленных шаблонов. При сравнении действуют обычные правила для символов*,?и[…], поэтому шаблону*соответствует любое слово, которому не нашлось соответствия в предыдущих шаблонах. После знака)следует список команд, выполняемых для соответствующих шаблонов. Этот список завершается символами;;. После выполнения списка завершается и выполнение оператораcase(как в Паскале, а не как вC).

        1. Оператор for:

for переменная [in список_слов]; do список_команд; done

Выполнение цикла forзаключается в том, что переменная принимает по очереди все значения, перечисленные в списке слов, и для каждого значения выполняется заданный список команд. Если конструкция “in список_слов” опущена, то вместо нее используется список всех параметров скрипта.

Если в списке слов используются шаблоны с символами подстановки *,?и[…], то они заменяются соответствующими именами файлов.

        1. Альтернативная форма оператора for:

for (( выраж1 ; выраж2 ; выраж3 )) ; do список_команд; done

Эта форма оператора for, поддерживаемаяbash, немного напоминает одноименный оператор языкаC. Вначале вычисляется арифметическое выражение 1. Правила вычислений будут описаны ниже, однако следует отметить, что при вычислении могут, в частности, выполняться и присваивания значений переменным. Затем циклически выполняются следующие действия: вычисляется значение выражения 2; если это значение не равно нулю, то выполняется список команд; затем вычисляется выражение 3. Выполнение цикла завершается, когда значение выражения 2 становится равным нулю.

Любые из трех выражений могут быть опущены, при этом значение опущенного выражения считается равным константе 1.