тест (Unix)
Другие имена | [ |
---|---|
Разработчик(и) | Различные с открытым исходным кодом и коммерческие разработчики разработчики |
Написано в | С |
Операционная система | Unix , Unix-подобные , Plan 9 , IBM i |
Платформа | Кросс-платформенный |
Тип | Команда |
Лицензия | основные утилиты : GPLv3+ План 9: МОЯ лицензия |
test — это утилита командной строки , встречающаяся в Unix , Plan 9 и Unix-подобных операционных системах, которая оценивает условные выражения . test был преобразован во встроенную команду оболочки в 1981 году в UNIX System III и в то же время стал доступен под альтернативным именем [ . [1]
Обзор
[ редактировать ]The test
команда в Unix оценивает expression
параметр. В самых последних реализациях оболочки это встроенная оболочка , хотя внешняя версия все еще существует. Во второй форме команды [ ]
(скобки) должны быть окружены пробелами (это потому, что [
— это программа, а оболочки, совместимые с POSIX, требуют пробела между именем программы и ее аргументами). Необходимо явно проверять имена файлов в C. оболочке Подстановка имени файла ( подстановка ) приводит к завершению сценария оболочки.
The test
команду не следует путать с командой [[
зарезервированное слово, которое было введено в ksh88. Последний не является командой, а является частью синтаксиса ksh88 и не применяет подстановку имени файла к выражению glob.
Версия test
пакет GNU coreutils был написан Кевином Браунсдорфом и Мэтью Брэдберном. [2] Команда доступна в виде отдельного пакета для Microsoft Windows как часть UnxUtils коллекции , состоящей из собственных Win32- портов распространенных GNU Unix-подобных утилит. [3] Команда test также была перенесена в операционную систему IBM i . [4]
Синтаксис
[ редактировать ]test expression
или [ expression ]
Аргументы
[ редактировать ]Следующие аргументы используются для создания этого параметра. Все аргументы возвращаются True
если объект (файл или строка) существует и указанное условие истинно.
Аргумент | Возврат True если файл
|
---|---|
-б | это специальный файл блока |
-с | это специальный файл символов |
-д | это каталог |
-и | существует |
-ф | это обычный файл |
-г | Set Group ID установлен бит |
-час | это символическая ссылка |
-к | установлен липкий бит |
-Л | это символическая ссылка |
-п | это именованный канал (FIFO) |
-р | доступен для чтения текущим процессом |
-с | имеет размер больше 0 |
-т | FileDescriptor открыт и связан с терминалом |
-в | установлен Set User ID бит |
-В | включен флаг записи |
-х | имеет выполнения флаг |
Для -x
аргумент, если указанный файл существует и является каталогом, True
значение выхода указывает, что текущий процесс имеет разрешение на изменение cd
в каталог.
Нестандартные Korn Shell расширения
[ редактировать ]file1 -nt file2 - file1 is newer than file2 file1 -ot file2 - file1 is older than file2 file1 -ef file2 - file1 is another name for file2 - (symbolic link or hard link)
Строковые аргументы
[ редактировать ]В Perl эти разделы перевернуты: eq
является строковым оператором и ==
— числовой оператор и так далее для остальных.
-n String1 - the length of the String1 variable is nonzero -z String1 - the length of the String1 variable is 0 (zero) String1 = String2 - String1 and String2 variables are identical String1 != String2 - String1 and String2 variables are not identical String1 - true if String1 variable is not a null string
Числовые аргументы
[ редактировать ]Integer1 -eq Integer2 - Integer1 and Integer2 variables are algebraically equal -ne - not equal -gt - greater than -ge - greater or equal -lt - less than -le - less or equal
Операторы
[ редактировать ]test
аргументы можно комбинировать со следующими операторами:
! - Unary negation operator -a - Binary AND operator -o - Binary OR operator (the-a
operator has higher precedence than the-o
operator) \(Expression\) - Parentheses for grouping must be escaped with a backslash\
The -a
и -o
операторы вместе с круглыми скобками для группировки являются расширениями XSI. [5] и поэтому не являются портативными. В переносимых сценариях оболочки того же эффекта можно добиться, подключив несколько вызовов test
вместе с &&
и ||
операторы и круглые скобки.
Статус выхода
[ редактировать ]Эта команда возвращает следующие значения выхода:
0 - The Expression parameter is true 1 - The Expression parameter is false or missing >1 - An error occurred
Примеры
[ редактировать ]1. Чтобы проверить, является ли файл несуществующим или пустым, введите:
if test ! -s "$1"
then
echo $1 does not exist or is empty.
fi
Если файл, указанный первым позиционным параметром процедуры оболочки, $1, не существует или имеет размер 0, команда тестирования отображает сообщение. Если $1 существует и имеет размер больше 0, команда тестирования ничего не отображает.
Примечание. Между функцией -s и именем файла должен быть пробел.
Кавычки вокруг $1 гарантируют правильную работу теста, даже если значение $1 представляет собой нулевую строку. Если кавычки опущены и $1 — пустая строка, команда тестирования отображает сообщение об ошибке:
test: argument expected.
2. Чтобы выполнить сложное сравнение, введите:
if [ "$#" -lt 2 ] || ! [ -e "$1" ]
then
exit
fi
Если процедуре оболочки задано менее двух позиционных параметров или файл, указанный в $1, не существует, процедура завершается. Специальная переменная оболочки $# представляет количество позиционных параметров, введенных в командной строке, которая запускает эту процедуру оболочки.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ http://www.in-ulm.de/~mascheck/bourne/#system3 Изменения Bourne Shell в System III
- ^ test(1) — coreutils — Debian buster — Debian Manpages
- ^ «Собственные порты Win32 некоторых утилит GNU» . unxutils.sourceforge.net .
- ^ ИБМ . «Программирование Qshell в IBM System i версии 7.2» (PDF) . ИБМ . Проверено 05 сентября 2020 г.
- ^ IEEE Std 1003.1, 2004 г., документация для
test
Дальнейшее чтение
[ редактировать ]- Роббинс, Арнольд; Нельсон Х. Ф. Биб (2005). «6.2.4 Команда тестирования» . Классические сценарии оболочки: скрытые команды, раскрывающие возможности Unix . O'Reilly Media, Inc., стр. 120–128. ISBN 978-0-596-55526-9 .
- Ян Шилдс (20 февраля 2007 г.). «Совет по Linux: функции тестирования и сравнения Bash» . IBM DeveloperWorks .
- Уильям Шоттс (2013). «27 — Управление потоком: ветвление с помощью if». Командная строка Linux . Нет крахмального пресса. стр. 381–390. ISBN 978-1-59327-389-7 . (бесплатная загрузка)
Внешние ссылки
[ редактировать ]
- Единая спецификация UNIX , версия 4 от Open Group. – Справочник по оболочке и утилитам,
- Linux пользователя по командам Руководство –
- Plan 9 , том 1 Руководство программиста –