5.8.2 Оператор test и условные выражения
5.8.2 Оператор test и условные выражения
Условные выражения, используемые в операторе test, строятся на основе проверки файловых атрибутов, сравнения строк и обычных арифметических сравнений. Сложные выражения строятся из следующих унарных или бинарных операций ("элементарных кирпичиков"):
• -a file
Верно, если файл с именем file существует.
• -b file
Верно, если file существует и является специальным файлом блочного устройства.
• -c file
Верно, если file существует и является специальным файлом символьного устройства.
• -d file
Верно, если file существует и является каталогом.
• -e file
Верно, если файл с именем file существует.
• -f file
Верно, если файл с именем file существует и является обычным файлом.
• -g file
Верно, если файл с именем file существует и для него установлен бит смены группы.
• -h file или -L file
Верно, если файл с именем file существует и является символической ссылкой.
• -k file
Верно, если файл с именем file существует и для него установлен "sticky' bit.
• -p file
Верно, если файл с именем file существует и является именованным каналом (FIFO).
• -r file
Верно, если файл с именем file существует и для него установлено право на чтение
• -s file
Верно, если файл с именем file существует и его размер больше нуля.
• -t fd
Верно, если дескриптор файла fd открыт и указывает на терминал.
• -u file
Верно, если файл с именем file существует и для него установлен бит смены пользователя.
• -w file
Верно, если файл с именем file существует и для него установлено право на запись.
• -x file
Верно, если файл с именем file существует и является исполняемым.
• -O file
Верно, если файл с именем file существует и его владельцем является пользователь, на которого указывает эффективный идентификатор пользователя.
• -G file
Верно, если файл с именем file существует и принадлежит группе, определяемой эффективным идентификатором группы.
• -S file
Верно, если файл с именем file существует и является сокетом.
• -N file
Верно, если файл с именем file существует и изменялся с тех пор, как был последний раз прочитан.
• file1 -nt file2
Верно, если файл file1 имеет более позднее время модификации, чем file2.
• file1 -ot file2
Верно, если файл file1 старше, чем file2.
• file1 -ef file2
Верно, если файлы file1 и file2 имеют одинаковые номера устройств и индексных дескрипторов (inode).
• -o optname
Верно, если задействована опция оболочки optname. Пояснения см. на странице man bash.
• -z string
Верно, если длина строки равна нулю.
• -n string
Верно, если длина строки не равна нулю.
• string1 == string2
Верно, если строки совпадают. Вместо == может использоваться =.
• string1 !== string2
Верно, если строки не совпадают.
• string1 ‹ string2
Верно, если строка string1 лексикографически предшествует строке string2 (для текущей локали).
• string1 › string2
Верно, если строка string1 лексикографически стоит после строки string2 (для текущей локали).
• arg1 OP arg2
Здесь OP - это одна из операций арифметического сравнения: -eq (равно), -ne (не равно), -lt (меньше чем), -le (меньше или равно), -gt (больше), -ge (больше или равно). В качестве аргументов могут использоваться положительные или отрицательные целые.
Из этих элементарных условных выражений можно строить сколь угодно сложные с помощью обычных логических операций ОТРИЦАНИЯ, И и ИЛИ:
• !(expression)
Булевский оператор отрицания.
• expression1 -a expression2
Булевский оператор AND (И). Верен, если верны оба выражения.
• expression1 -o expression2
Булевский оператор OR (ИЛИ). Верен, если верно любое из двух выражений.
Такие же условные выражения используются и в операторах while и until, которые мы рассмотрим чуть ниже.