тест (Unix)

Утилита командной строки
тест
Другие имена[
Разработчик(и)Различные разработчики открытого и коммерческого ПО
Написано вС
Операционная системаUnix , Unix-подобный , Plan 9 , IBM i
ПлатформаКроссплатформенный
ТипКоманда
Лицензияcoreutils : GPLv3+,
план 9: лицензия MIT

test — это утилита командной строки, встречающаяся в Unix , Plan 9 и Unix-подобных операционных системах, которая оценивает условные выражения . test был преобразован во встроенную команду оболочки в 1981 году с появлением UNIX System III и в то же время стал доступен под альтернативным названием [ . [1]

Обзор

Команда testв Unix оценивает expressionпараметр. В большинстве последних реализаций оболочки это встроенная оболочка , хотя внешняя версия все еще существует. Во второй форме команды [ ](скобки) должны быть окружены пробелами (это связано с тем, что [это программа, а совместимые с POSIX оболочки требуют пробела между именем программы и ее аргументами). Необходимо явно проверять имена файлов в оболочке C. Подстановка имени файла ( глоббинг ) приводит к завершению работы скрипта оболочки.

Эту testкоманду не следует путать с [[зарезервированным словом, которое было введено в ksh88. Последнее не является командой, а частью синтаксиса ksh88 и не применяет подстановку имени файла к глобальным выражениям.

Версия, testвходящая в GNU coreutils , была написана Кевином Браунсдорфом и Мэтью Брэдберном. [2] Команда доступна в виде отдельного пакета для Microsoft Windows как часть коллекции UnxUtils собственных портов Win32 распространенных утилит GNU Unix. [3] Тестовая команда также была перенесена в операционную систему IBM i . [4]

Синтаксис

test expressionили[ expression ]

Аргументы

Для построения этого параметра используются следующие аргументы. Все аргументы возвращаются, Trueесли объект (файл или строка) существует, и указанное условие истинно.

АргументВозвращает, Trueесли файл
это блочный специальный файл
это специальный файл персонажа
это каталог
существует
это обычный файл
установлен бит Set Group ID
-часэто символическая ссылка
имеет установленный липкий бит
это символическая ссылка
-пэто именованный канал (FIFO)
доступен для чтения текущим процессом
имеет размер больше 0
FileDescriptor открыт и связан с терминалом
установлен бит Set User ID
флаг записи включен
имеет флаг выполнения на

Для -xаргумента, если указанный файл существует и является каталогом, Trueвыходное значение указывает, что текущий процесс имеет разрешение на изменение cdкаталога.

НестандартныйКорн Шеллрасширения

file1 -nt file2 - file1 новее file2file1 -ot file2 - file1 старше file2file1 -ef file2 - file1 - это другое имя для file2 - ( символическая ссылка или жесткая ссылка )

Аргументы строки

В Perl эти разделы меняются местами: eqэто строковый оператор, а ==это числовой оператор, и так далее для остальных.

-n String1 — длина переменной String1 не равна нулю -z String1 — длина переменной String1 равна 0 (нулю)String1 = String2 — переменные String1 и String2 идентичныString1 != String2 - переменные String1 и String2 не идентичныString1 — true, если переменная String1 не является пустой строкой

Число аргументов

Integer1 -eq Integer2 - переменные Integer1 и Integer2 алгебраически равны -ne - не равны -gt - больше -ge - больше или равно -lt - меньше -le - меньше или равно

Операторы

testаргументы можно комбинировать со следующими операторами:

! - Унарный оператор отрицания -a - Бинарный оператор И -o - Бинарный оператор ИЛИ ( -aоператор имеет более высокий приоритет, чем -oоператор) \(Выражение\) - Скобки для группировки должны быть экранированы обратной косой чертой\

Операторы -aи -oвместе со скобками для группировки являются расширениями XSI [5] и поэтому не являются переносимыми. В переносимых скриптах оболочки тот же эффект может быть достигнут путем соединения нескольких вызовов testвместе с операторами &&и ||и скобками.

Статус выхода

Эта команда возвращает следующие значения выхода:

0 - Параметр Expression имеет значение true 1 - Параметр Expression имеет значение false или отсутствует >1 - Произошла ошибка

Примеры

1. Чтобы проверить, является ли файл несуществующим или пустым, введите:

 если test ! -s " $ 1 " тогда echo $1 не существует или пуст . fi              

Если файл, указанный первым позиционным параметром процедуры оболочки, $1, не существует или имеет размер 0, тестовая команда выводит сообщение. Если $1 существует и имеет размер больше 0, тестовая команда ничего не выводит.

Примечание: между функцией -s и именем файла должен быть пробел.

Кавычки вокруг $1 гарантируют, что тест работает правильно, даже если значение $1 — пустая строка. Если кавычки опущены и $1 — пустая строка, команда теста выводит сообщение об ошибке:

тест: ожидается аргумент.

2. Чтобы выполнить сложное сравнение, введите:

 если [ " $# " -lt 2 ] || ! [ -e " $1 " ] тогда выходим из fi              

Если процедуре оболочки задано менее двух позиционных параметров или файл, указанный $1, не существует, то процедура оболочки завершается. Специальная переменная оболочки $# представляет собой количество позиционных параметров, введенных в командной строке, которая запускает эту процедуру оболочки.

Смотрите также

Ссылки

  1. ^ http://www.in-ulm.de/~mascheck/bourne/#system3 Изменения оболочки Bourne в System III
  2. ^ test(1) — coreutils — Debian buster — Debian Manpages
  3. ^ "Нативные порты Win32 некоторых утилит GNU". unxutils.sourceforge.net .
  4. ^ IBM . "IBM System i Version 7.2 Programming Qshell" (PDF) . IBM . Получено 2020-09-05 .
  5. ^ IEEE Std 1003.1, 2004, документация для испытаний

Дальнейшее чтение

  • Роббинс, Арнольд; Нельсон Х. Ф. Биби (2005). "6.2.4 Команда test". Классический скриптинг оболочки: скрытые команды, раскрывающие мощь Unix . O'Reilly Media, Inc. стр. 120–128. ISBN 978-0-596-55526-9.
  • Ян Шилдс (20 февраля 2007 г.). "Совет по Linux: функции тестирования и сравнения Bash". IBM DeveloperWorks .
  • Уильям Шоттс (2013). "27 – Управление потоком: ветвление с if". Командная строка Linux. No Starch Press. стр. 381–390. ISBN 978-1-59327-389-7.(бесплатная загрузка)
Взято с "https://en.wikipedia.org/w/index.php?title=Test_(Unix)&oldid=1193078452"