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.

Примечания

[править | править код]
  1. traditional Bourne shell family / history and development. www.in-ulm.de. Дата обращения: 15 июля 2017. Архивировано 14 апреля 2020 года.
  • test(1) — страница справки man по пользовательским командам GNU/Linux  (англ.) (см. GNU Coreutils)
  • test(1) — страница справки man по пользовательским командам OpenBSD  (англ.)
  • test(1) — страница справки man по пользовательским командам FreeBSD  (англ.)