В Shell имеется несколько флагов, доступных для процедур.
Это:
-e Этот флаг указывает Shell на необходимость немедленного выхода, если какая-либо выполняемая команда кончается с ненулевым кодом завершения. Этот флаг полезен для процедур, составленных из простых командных строк. Его нельзя использовать в сочетании с другими условными конструкциями.
-u Этот флаг вызывает отмену значений переменных, оказавшихся ошибочными при подстановке. Этот флаг можно использовать для глобальной проверки переменных вместо условной подстановки для проверки каждой переменной.
-t Этот флаг указывает Shell'у на необходимость выхода после считывания и выполнения команд, оставшихся на текущей командной строке. Этот флаг обычно используется программами на Си, которые вызывают Shell для выполнения отдельной команды.
-n Это флаг отмены выполнения. Его используют, когда хотят проверить процедуру на наличие синтаксических ошибок, но при этом не выполнять саму процедуру. Это делается указанием "set -nv" в начале файла.
-k Этот флаг указывает Shell'у, что все аргументы в виде переменная=значение должны рассматриваться как ключевые параметры. Когда этот флаг не установлен, ключевыми параметрами считаются только аргументы, стоящие перед самой командой.
Процедуры Shell могут использовать любую команду UNIX. Команды, описываемые в этой главе, либо особенно часто используются в процедурах, либо специально разработаны для такого использования.
Условная проверка: test
Команда test проверяет выражение, указанное в качестве аргумента, и если выражение истинно, то test заканчивается с нулевым кодом. В противном случае возвращается ненулевой код завершения. test также дает ненулевой код завершения в случае, если не указаны аргументы. Часто бывает удобно применять test в качестве первой команды в списке команд после if или while. Переменные Shell, используемые в проверяемых выражениях, должны быть заключены в двойные кавычки, если имеется вероятность, что они пустые или не определены.
В качестве альтернативного обозначения команды test можно применять квадратные скобки, например:
[ выражение ]
имеет такое же действие как:
test выражение
Помните, что пробелы перед и после выражения внутри квадратных скобок обязательны.
Ниже приведен неполный список опций, которые могут использоваться для формирования условных конструкций.
-r file Истинно, если указанный файл существует и доступен пользователю для чтения.
-w file Истинно, если указанный файл существует и доступен пользователю для записи.
-x file Истинно, если указанный файл существует и может быть выполнен пользователем.
-s file Истинно, если указанный файл существует и имеет ненулевую длину.
-d file Истинно, если указанный файл является каталогом.
-f file Истинно, если указанный файл является обычным файлом.
-z sl Истинно, если длина строки sl равна нулю.
-n sl Истинно, если длина строки sl не равна нулю.
-t fildes Истинно, если открытый файл с дескриптором fildes соответствует терминалу. Если fildes не указан, по умолчанию считается fildes=1.
s1 = s2 Истинно, если строки s1 и s2 идентичны.
s1 != s2 Истинно, если строки s1 и s2 различны.
s1 Истинно, если строка s1 ненулевая.
n1 -eq n2 Истинно, если целые числа n1 и n2 алгебраически равны.
Другие алгебраические сравнения обозначаются:
-ne (не равно), -gt (больше чем), -ge (больше или равно), -lt (меньше чем), -le (меньше или равно).
Все эти опции можно объединять со следующими операторами:
! оператор унарного отрицания
-а бинарный логический оператор AND (и)
-o бинарный логический оператор OR (или), имеет меньший приоритет, чем AND (выраж) Скобки для группирования. При отсутствии скобок проверка выражения идет слева направо.
Помните, что все опции, операторы, имена файлов и т.д. являются отдельными аргументами для test.