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

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

При выполнении оператора selectшелл выдает меню, состоящее из заданного списка слов. Перед каждым словом указан его номер в списке. Для выдачи меню используется стандартный вывод ошибок (хэндл 2), поэтому меню появляется на экране, даже если стандартный вывод (хэндл 1) перенаправлен в файл. Затем выдается приглашение к вводу (PS3) и со стандартного ввода считывается число, введенное пользователем. Если это число равно номеру одного из слов – пунктов меню, то это слово присваивается переменной, после чего выполняется заданный список команд. При вводе любой другой непустой строки переменная получает пустое значение. Если пользователь ввел пустую строку, то выдача меню и приглашения повторяется.

Введенная строка сохраняется в системной переменной REPLY.

Выдача меню и запрос номера пункта повторяется циклически, пока пользователь не введет признак конца файла (Ctrl+D).

Если в ответ на очередное приглашение введена пустая строка, то выдача меню и приглашения повторяется.

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

Если конструкция “in список_слов” опущена, то вместо нее используется список всех параметров скрипта.

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

break [число]

Вызывает досрочный выход из любого из операторов цикла while,until,forилиselect. Если указан параметр – положительное число, то выход происходит сразу из указанного числа вложенных операторов цикла.

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

continue [число]

Вызывает досрочный переход на следующую итерацию любого из операторов цикла while,until,forилиselect. Если указан параметр – положительное числоN, то происходит выход изN-1 вложенных операторов цикла и переход на следующую итерациюN-го цикла.

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

shift [число]

Вызывает сдвиг нумерации позиционных параметров скрипта: параметр %2становится параметром%1, параметр%3– параметром%2и т.д. Прежний параметр%1становится при этом недоступным. Если в командеshiftуказан аргумент – неотрицательное числоN, то сдвиг происходит сразу наNединиц.

Команда удобна при программировании циклов обработки позиционных параметров скрипта.

      1. Арифметические выражения

Как было сказано выше, все переменные языка shellимеют строковые значения. Арифметика не является сильной сторонойshell, однако в некоторых ситуациях удобно рассматривать значения переменных как строковые представления целых чисел и выполнять операции над этими числами. Это может быть полезно, например, для генерации имен файлов, различающихся только номерами, для организации выполнения циклов по счетчику и т.п.

В ранних версиях системы использование арифметических выражений было ограничено рамками специальной встроенной команды «let выражение» (подобно тому, как для логических выражений использовалась командаtest). Вbashможно также заключить выражение в двойные круглые скобки:((строка)). При этом строка будет рассматриваться как арифметическое выражение. В целом же конструкция в двойных скобках рассматривается как команда, выполнение которой заключается в вычислении выражения (в том числе с возможными присваиваниями значений переменным), а код завершения равен 1, если значение выражения равно 0, и равен 0 в противном случае.

Конструкция $((строка))означает строковое представление результата вычисления арифметического выражения.

Первичными конструкциями арифметических выражений являются слова, представляющие целые числа, а также переменные, которые должны содержать такие слова. По умолчанию используется десятичная система счисления. Если запись числа начинается с цифры 0, то число рассматривается как восьмеричное, а если с символов0xили0X– как шестнадцатеричное.

Синтаксис арифметических выражений bashочень сильно напоминает синтаксис выражений языкаC. Ниже приведена таблица арифметических операций, расположенных в порядке понижения приоритета.

Приоритет

Формат

Смысл

переменная++

переменная--

Пост-инкремент и пост-декремент значения переменной

++переменная

--переменная

Пре-инкремент и пре-декремент значения переменной

-

+

Унарные минус и плюс

!

~

Логическое отрицание

Поразрядная инверсия

**

Возведение в степень

*

/

%

Умножение

Деление

Остаток от деления

+

-

Сложение

Вычитание

<<

>>

Сдвиг влево

Сдвиг вправо

<= >= < >

Сравнения на «больше/меньше»

== !=

Сравнения на равенство/неравенство

&

Поразрядная конъюнкция

^

Поразрядное исключающее ИЛИ

|

Поразрядная конъюнкция

&&

Логическое И

||

Поразрядная дизъюнкция

выраж1 ? выраж2 : выраж3

Условное выражение

= *= /= %= += -= <<= >>= &= ^= |=

Присваивания

выраж1 , выраж2

Последовательное вычисление выражений

Внутри арифметических выражений не обязательно использовать символ $для обращения к значению переменной. Для изменения порядка вычислений можно использовать обычные круглые скобки.