Управляющие конструкции - часть 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 (меньше или равно).
Примитивы комбинируются с помощью круглых скобок, а также следующих операций (в порядке уменьшения приоритета):