test
test — UNIX-утилита для проверки типа файла и сравнения значений. Возвращает код возврата 0 (ложь) или 1 (истина) в зависимости вычисления выражения expr
. Выражения могут быть как унарными, так и бинарными. Унарные выражения часто используются для проверки статуса файла. Также допустимо сравнение чисел и строк.
Начиная с UNIX System III утилита стала встроенной, также появилась вторая её форма - [.[1]
Использование
[править | править код]test [expr]
test {--help,--version}
Обычно используется в несложных shell-скриптах для проверок разного рода. Следующий пример удалит обычный файл test.txt, если он существует, либо выведет сообщение, что данного файла нет.
#!/bin/sh
if test -f test.txt
then
rm test.txt
else
echo 'файл test.txt не найден'
fi
Для сокращения кода сценария используют парный оператор '[' как синоним test. Парный оператор требует пробела между скобками потому, что [ (скобка) является командой оболочки, а POSIX совместимые оболочки требует пробела между командой и её аргументами.
#!/bin/sh
if [ -f test.txt ]
then
rm test.txt
else
echo 'файл test.txt не найден'
fi
Параметры запуска
[править | править код]-b file
— истина, если file существует и является специальным блочным устройством.-c file
— истина, если file существует и символьное устройство.-d file
— истина, если file существует и является каталогом.-e file
— истина, если file существует.-f file
— истина, если file существует и является обычным файлом.-g file
— истина, если file существует и имеет установленным групповой идентификатор (set-group-id).-k file
— истина, если file имеет установленным «sticky» бит.-L file
— истина, если file существует и является символьной ссылкой.-p file
— истина, если file существует и является именованным каналом (pipe).-r file
— истина, если file существует и читаем.-s file
— истина, если file существует и имеет размер больше, чем ноль.-S file
— истина, если file существует и является сокетом.-t [fd]
— истина, если fd открыт на терминале. Если fd пропущен, по умолчанию 1 (стандартное устройство вывода).-u file
— истина, если file существует и имеет установленным бит пользователя (set-user-id).-w file
— истина, если file существует и записываемый.-x file
— истина, если file существует и исполняемый.-O file
— истина, если file существует и его владелец имеет эффективный идентификатор пользователя.-G file
— истина, если file существует и его владелец имеет эффективный идентификатор группы.file1 -nt file2
— истина, если file1 новее (дата модификации), чем file2.file1 -ot file2
— истина, если file1 старее, чем file2.file1 -ef file2
— истина, если file1 и file2 имеют то же устройство и номер inode.-z string
— истина, если длина string равна нулю.-n string
— истина, если длина string не ноль.string1 = string2
— истина, если строки равны.string1 != string2
— истина, если строки не равны.! expr
— истина, если выражение expr ложь.expr1 -a expr2
— истина, если оба выражения expr1 и expr2 истина.expr1 -o expr2
— истина, если хотя бы одно из выражений expr1 или expr2 истина.arg1 %оператор% arg2 -eq, -ne, -lt, -le, -gt, или -ge
— эти арифметические бинарные операции возвращают истину, если arg1 равно (-eq), не равно (-ne), меньше чем (-lt), меньше чем или равно (-le), больше чем (-gt), или больше или равно (-ge), чем arg2, соответственно. arg1 и arg2 могут быть положительными целыми, отрицательными целыми, или специальными выражениями -l string, которые вычисляют длину string.
Примечания
[править | править код]- ↑ traditional Bourne shell family / history and development . www.in-ulm.de. Дата обращения: 15 июля 2017. Архивировано 14 апреля 2020 года.