Spec-Zone.ru › Fish 3.6

test - выполнение тестов для файлов и текста

Синтаксис

test [EXPRESSION]
[ [EXPRESSION] ]

Описание

Тестирует заданное выражение и устанавливает код выхода в 0, если оно истинно, и в 1, если ложно. Выражение состоит из одного или нескольких операторов и их аргументов.

Первый вариант (test) предпочтительнее. Для совместимости с другими оболочками доступен второй вариант: парные квадратные скобки ([ [EXPRESSION] ]).

Этот тест в основном совместим с POSIX.

При использовании переменной в качестве аргумента для оператора теста почти всегда следует заключать её в двойные кавычки. Существует всего две ситуации, когда можно безболезненно опустить кавычки. Первая — когда аргумент является литеральной строкой без пробелов или других символов, имеющих специальное значение для оболочки (например, точка с запятой). Например, test -b /my/file. Вторая — когда переменная раскрывается ровно в один элемент, включая пустую строку (например, set x ''). Если переменная не определена, определена, но не имеет значения или содержит более одного значения, её необходимо заключить в двойные кавычки. Например, test "$x" = "$y". Поскольку всегда безопасно заключать переменные в двойные кавычки при использовании их в качестве test аргументов, это рекомендуемая практика.

Операторы для файлов и каталогов

-b ФАЙЛ

Возвращает true, если ФАЙЛ — это блочный устройство.

-c ФАЙЛ

Возвращает true, если ФАЙЛ — это символьное устройство.

-d ФАЙЛ

Возвращает true, если ФАЙЛ — это каталог.

-e ФАЙЛ

Возвращает true, если ФАЙЛ существует.

-f ФАЙЛ

Возвращает true, если ФАЙЛ — это обычный файл.

-g ФАЙЛ

Возвращает true, если для ФАЙЛ установлен бит set-group-ID.

-G ФАЙЛ

Возвращает true, если ФАЙЛ существует и имеет тот же идентификатор группы, что и текущий пользователь.

-k ФАЙЛ

Возвращает true, если для ФАЙЛ установлен бит sticky. Если ОС не поддерживает эту концепцию, возвращает false. См. https://en.wikipedia.org/wiki/Sticky_bit.

-L ФАЙЛ

Возвращает true, если ФАЙЛ — это символическая ссылка.

-O ФАЙЛ

Возвращает true, если ФАЙЛ существует и принадлежит текущему пользователю.

-p ФАЙЛ

Возвращает true, если ФАЙЛ — это именованная трубка.

-r ФАЙЛ

Возвращает true, если ФАЙЛ помечен как читаемый.

-s ФАЙЛ

Возвращает true, если размер ФАЙЛ больше нуля.

-S ФАЙЛ

Возвращает true, если ФАЙЛ — это сокет.

-t ДЕСКРИПТОР

Возвращает true, если дескриптор файла ДЕСКРИПТОР — это терминал (TTY).

-u ФАЙЛ

Возвращает true, если для ФАЙЛ установлен бит set-user-ID.

-w ФАЙЛ

Возвращает true, если ФАЙЛ помечен как записываемый; обратите внимание, что это не проверяет, является ли файловая система только для чтения.

-x ФАЙЛ

Возвращает true, если ФАЙЛ помечен как исполняемый.

Операторы для сравнения файлов и каталогов

ФАЙЛ1 -nt ФАЙЛ2

Возвращает true, если ФАЙЛ1 новее ФАЙЛ2 или ФАЙЛ1 существует, а ФАЙЛ2 нет.

ФАЙЛ1 -ot ФАЙЛ2

Возвращает true, если ФАЙЛ1 старше ФАЙЛ2 или ФАЙЛ2 существует, а ФАЙЛ1 нет.

ФАЙЛ1 -ef ФАЙЛ2

Возвращает true, если ФАЙЛ1 и ФАЙЛ2 ссылаются на один и тот же файл.

Операторы для текстовых строк

СТРОКА1 = СТРОКА2

Возвращает true, если строки СТРОКА1 и СТРОКА2 идентичны.

СТРОКА1 != СТРОКА2

Возвращает true, если строки СТРОКА1 и СТРОКА2 не идентичны.

-n СТРОКА

Возвращает true, если длина СТРОКА ненулевая.

-z СТРОКА

Возвращает true, если длина СТРОКА равна нулю.

Операторы для сравнения и проверки чисел

ЧИСЛО1 -eq ЧИСЛО2

Возвращает true, если ЧИСЛО1 и ЧИСЛО2 численно равны.

ЧИСЛО1 -ne ЧИСЛО2

Возвращает true, если ЧИСЛО1 и ЧИСЛО2 численно не равны.

ЧИСЛО1 -gt ЧИСЛО2

Возвращает true, если ЧИСЛО1 больше ЧИСЛО2.

ЧИСЛО1 -ge ЧИСЛО2

Возвращает true, если ЧИСЛО1 больше или равно ЧИСЛО2.

ЧИСЛО1 -lt ЧИСЛО2

Возвращает true, если ЧИСЛО1 меньше ЧИСЛО2.

ЧИСЛО1 -le ЧИСЛО2

Возвращает true, если ЧИСЛО1 меньше или равно ЧИСЛО2.

Поддерживаются целые и вещественные числа.

Операторы для объединения выражений

УСЛОВИЕ1 -a УСЛОВИЕ2

Возвращает true, если оба УСЛОВИЕ1 и УСЛОВИЕ2 истинны.

УСЛОВИЕ1 -o УСЛОВИЕ2

Возвращает true, если хотя бы УСЛОВИЕ1 или УСЛОВИЕ2 истинно.

Выражения можно инвертировать с помощью оператора !:

! ВЫРАЖЕНИЕ

Возвращает true, если ВЫРАЖЕНИЕ ложно, и false, если ВЫРАЖЕНИЕ истинно.

Выражения можно группировать с помощью скобок.

( ВЫРАЖЕНИЕ )

Возвращает значение ВЫРАЖЕНИЕ.

Обратите внимание, что скобки обычно требуют экранирования с помощью \( для предотвращения их интерпретации как подстановки команд.

Примеры

Если каталог /tmp существует, скопировать файл /etc/motd в него:

if test -d /tmp
    cp /etc/motd /tmp/motd
end

Если переменная MANPATH определена и не пуста, вывести её содержимое. (Если MANPATH не определена, то она раскроется в ноль аргументов, если не заключена в кавычки.)

if test -n "$MANPATH"
    echo $MANPATH
end

Скобки и операторы -o и -a могут быть объединены для создания более сложных выражений. В данном примере успех будет выведен, если существует файл /foo или /bar, а также файл /baz или /bat.

if test \( -f /foo -o -f /bar \) -a \( -f /baz -o -f /bat \)
    echo Success.
end

Числовые сравнения просто потерпят неудачу, если один из операндов не является числом:

if test 42 -eq "The answer to life, the universe and everything"
    echo So long and thanks for all the fish # will not be executed
end

Типичное сравнение выполняется с status:

if test $status -eq 0
    echo "Previous command succeeded"
end

Предыдущий тест также можно инвертировать:

if test ! $status -eq 0
    echo "Previous command failed"
end

что логически эквивалентно следующему:

if test $status -ne 0
    echo "Previous command failed"
end

Стандарты

test реализует подмножество стандарта IEEE Std 1003.1-2008 (POSIX.1). Следующие исключения применимы:

  • Операторы < и > для сравнения строк не реализованы.
  • Поскольку этот тест является встроенной функцией оболочки, а не автономной утилитой, использование флага -c для специальных дескрипторов файлов, таких как стандартный ввод и вывод, может не возвращать тот же результат при вызове внутри канала, что и при вызове утилиты test в другой оболочке.

В таких случаях можно использовать command test для явного использования автономной утилиты test системы вместо этой встроенной функции builtin test.

© 2005-2009 Axel Liljencrantz, 2009-2023 fish-shell contributors
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.6/cmds/test.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API