НАЗВАНИЕ
test, — утилита проверки условий
СИНТАКСИС
test выражение
[ выражение ]
ОПИСАНИЕ
Утилита test проверяет условие, и если оно выполняется, возвращает 0
(истина). В противном случае возвращается 1 (ложь). Если условие не
задано, test также возвратит 1 (ложь).Все операторы и флаги представляют собой отдельные аргументы к данной утилите.
Для создания выражений используются следующие примитивы:
-b файл
Истина если файл существует и является специальным файлом
блочного устройства.
-c файл
Истина если файл существует и является специальным файлом
посимвольного устройства.
-d файл
Истина если файл существует и является каталогом.
-e файл
Истина если файл существует (независимо от типа).
-f файл
Истина если файл существует и является обычным файлом.
-g файл
Истина если файл существует и имеет установленный флаг
«установить идентификатор группы» (set group ID).
-h файл
Истина если файл существует и является символической ссыл-
кой. Этот оператор сохранён для совместимости с предыду-
щими версиями программы.
Не стоит полагаться на его нали-
чие, вместо этого используйте -L.
-k файл
Истина если файл существует и имеет установленный бит
sticky.
-n строка
Истина если длина строки строка ненулевая.
-p файл
Истина если файл является именованным каналом (FIFO).
-r файл
Истина если файл существует и доступен на чтение.
-s файл
Истина если файл существует и его длина больше нуля.
-t дескриптор_файла
Истина если файл, дескриптор которого задаётся аргументом
дескриптор_файла, открыт и связан с терминалом.
-u файл
Истина если файл существует и имеет установленный флаг
«установить идентификатор польльзователя» (set user ID).
-w файл
Истина если файл существует и доступен на запись. Истина
лишь означает, что флаг записи включен. В файловой системе
доступной только на чтение файл не является записываемым,
даже если эта проверка показывает обратное.
-x файл
Истина если файл существует и является исполняемым. Истина
лишь означает, что флаг запуска включен. Если файл явля-
ется каталогом, истина означает, что внутри него возможно
производить поиск.
-z строка
Истина если длина аргумента строка нулевая.
-L файл
Истина если файл существует и является символической ссылкой.
-O файл
Истина если файл существует и его владелец совпадает с
идентификатором эффективного пользователя данного процесса.
-G файл
Истина если файл существует и его группа совпадает с иден-
тификатором эффективной группы данного процесса.
-S файл
Истина если файл существует и является сокетом.
файл1 -nt файл2
Истина если файл1 существует и новее файла файл2.
файл1 -ot файл2
Истина если файл1 существует и старее файла файл2.
файл1 -ef файл2
Истина если файлы файл1 и файл2 существуют и ссылаются на
один и тот же файл.
строка
Истина если строка не является пустой.
s1 = s2
Истина если строки s1 и s2 идентичны.
s1 != s2
Истина если строки s1 и s2 отличаются.
s1 < s2
Истина если строка s1 предшествует строке s2 основываясь на
двоичном значении их символов.
s1 > s2
Истина если строка s1 следует за s2 основываясь на двоичном
значении их символов.
n1 -eq n2
Истина если целые числа n1 и n2 алгебраически равны.
n1 -ne n2
Истина если целые числа n1 и n2 алгебраически не равны.
n1 -gt n2
Истина если целое n1 алгебраически больше целого n2.
n1 -ge n2
Истина если целое n1 алгебраически больше либо равно целому n2.
n1 -lt n2
Истина если целое n1 алгебраически меньше целого n2.
n1 -le n2
Истина если целое n1 алгебраически меньше либо равно целому n2.
Если файл является символической ссылкой, то test полностью разыменовы-
вает её и далее вычисляет выражение уже с конечным файлом, за исключением
примитив -h и -L.
Примитивы могут комбинироваться со следующими операторами:
! выражение
Истина если выражение ложно.
выражение1 -a выражение2
Истина если оба выражение1 и выражение2 истинны.
выражение1 -o выражение2
Истина если хотя бы одно из выражений выражение1 и
выражение2 истинно.
(выражение)
Истина если выражение истинно.
Оператор -a имеет более высокий приоритет, чем оператор -o
Некоторые командные оболочки имеют встроенную команду test с похожей либо
идентичной функциональностью. Обратитесь к странице справочника
builtin(1).
НЕОДНОЗНАЧНОСТЬ ГРАММАТИКИ
Грамматика утилиты test по своей сути неоднозначна. Чтобы обеспечить
определённую степень непротиворечивости, случаи, рассматриваемые стандар-
том IEEE Std 1003.2 («POSIX.2») в разделе D11.2/4.62.4, вычисляются
строго в соответствии с правилами, указанными в документе стандарта. Все
остальные случаи ограничены неоднозначностями в семантике команды.
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Утилита test возвращает одно из следующих значений:
0 Выражение истинно.
1 Выражение ложно или отсутствует.
>1 Произошла ошибка.
СМОТРИ ТАКЖЕ
builtin(1), expr(1), sh(1), symlink(7)
СТАНДАРТЫ
Утилита test реализует расширение спецификации IEEE Std 1003.2
(«POSIX.2»).
ПРОБЛЕМЫ
В случае использования -a и -o, всегда вычисляются обе части выражения, в
отличие от логических операторов sh(1). Например, следующей командой
будет проверяться возможность записи в файл, несмотря на то, что первое
выражение является ложным. Результатом этого будет ненужное обращение к
файловой системе:
[ -z abc -a -w файл ]