Другие имена | [ |
---|---|
Разработчик(и) | Различные разработчики открытого и коммерческого ПО |
Написано в | С |
Операционная система | 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, не существует, то процедура оболочки завершается. Специальная переменная оболочки $# представляет собой количество позиционных параметров, введенных в командной строке, которая запускает эту процедуру оболочки.