Программирование в стандарте POSIX


Управляющие конструкции - часть 2


Приведем примеры использования управляющих конструкций. Сначала усовершенствуем процедуру three_args, чтобы она выдавала значения всех, а не только первых трех аргументов (см. листинг 2.18):

echo Идентификатор текущего процесса: $$ echo Имя команды: $0 echo Число фактических аргументов: $# echo Совокупность всех аргументов: $@ i=1 for arg do echo Значение аргумента номер ${i}: $arg i=$(($i+1)) done

Листинг 2.18. Еще одно усовершенствование shell-процедуры three_args.

В управляющих конструкциях if и while часто используется команда test, она проверяет некоторое условие и вырабатывает нулевой или ненулевой код завершения в зависимости от того, оказалось ли условие, соответственно, истинным или ложным. Команда записывается любым из двух способов:

test условие

или употребив пару квадратных скобок:

[ условие ]

Условие может включать, помимо прочих, следующие примитивы:

-r файл

Истина, если файл существует и доступен для чтения.

-w файл

Истина, если файл существует и доступен для записи.

-x файл

Истина, если файл существует и является выполнимым.

-f файл

Истина, если файл существует и является обычным файлом.

-d файл

Истина, если файл существует и является каталогом.

-c файл

Истина, если файл существует и является специальным символьным файлом.

-b файл

Истина, если файл существует и является специальным блочным файлом.

-p файл

Истина, если файл существует и является именованным каналом.

-s файл

Истина, если файл существует и имеет ненулевой размер.

-n s1

Истина, если цепочка символов s1 имеет ненулевую длину.

s1 = s2

Истина, если цепочки символов s1 и s2 равны.

s1 != s2

Истина, если цепочки символов s1 и s2 не равны.

n1 -eq n2

Истина, если целые числа n1 и n2 алгебраически равны. На месте -eq могут быть также операции сравнения -ne (не равно), -gt (больше), -ge (больше или равно), -lt (меньше), -le (меньше или равно).

Примитивы комбинируются с помощью круглых скобок, а также следующих операций (в порядке уменьшения приоритета):




Начало  Назад  Вперед