Администрирование FreeBSD, Linux, ... FreeBSD scripts: команда test(1) Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


FreeBSD scripts: команда test(1) Печать
Добавил(а) microsin   
Специально для условного оператора sh(1) существует программа осуществляющая математические проверки, проверки на существование файловых объектов и равенство строк. В зависимости от результата сравнения эта программа возвращает либо ноль, либо единицу. Речь идёт о программе test(1). Опции команды test(1)
ОпцияОписание
Проверки файловых объектов
-e <file> Истина, если <file> существует независимо от того, чем он является
-r <file> Истина, если <file> существует и из него можно читать
-w <file> Истина, если <file> существует и в него можно писать
-x <file> Истина, если <file> существует и его можно выполнить
-s <file> Истина, если <file> существует и не пуст
-b <file> Истина, если <file> существует и является блочным устройством
-c <file> Истина, если <file> существует и является символьным устройством устройством
-d <file> Истина, если <file> существует и является каталогом
-f <file> Истина, если <file> существует и является обычным файлом
-h <file> -L <file> Истина, если <file> существует и является символьной ссылкой. Опция -h оставлена для совместимости и не рекомендуется к использованию.
-p <file> Истина, если <file> существует и является именованным каналом (FIFO)
-S <file> Истина, если <file> существует и является сокетом
-k <file> Истина, если <file> существует и на нём установлен stiсky-бит
-t <num> Истина, если файловый дескриптор <num> существует и направлен на терминал. С помощью этой проверки можно убедиться направлен ли вывод скрипта на терминал или перенаправлен в файл
-O <file> Истина, если <file> существует и его владелец тот же, что и EUID данного процесса
-G <file> Истина, если <file> существует и его группа та же, что и EGID данного процесса
<file1> -nt <file2> Истина, если файл <file1> новее (newer then) чем файл <file2>
<file1> -ot <file2> Истина, если файл <file1> старше (older then) чем файл <file2>
<file1> -et <file2> Истина, если файл <file1> и файл <file2> указывают на один и тот же файл
Проверки строк
-n <string> Истина, если строка <string> не пуста
<string> Истина, если строка <string> не пуста
-z <string> Истина, если строка <string> пуста
<s1> = <s2> Истина, если строки <s1> и <s2> одинаковы
<s1> != <s2> Истина, если строки <s1> и <s2> отличаются
<s1> < <s2> Истина, если строка <s1> должна идти перед <s2> по кодам ASCII. Например "abc" < "abd"
<s1> > <s2> Истина, если строка <s1> должна идти после <s2> по кодам ASCII
Проверки чисел
<n1> -eq <n2> Истина, если числа <n1> и <n2> равны (equal)
<n1> -ne <n2> Истина, если числа <n1> и <n2> не равны (not equal)
<n1> -ge <n2> Истина, если число <n1> больше либо равно <n2> (grater or equal)
<n1> -gt <n2> Истина, если число <n1> строго больше <n2> (grater then)
<n1> -le <n2> Истина, если число <n1> меньше либо равно <n2> (less or equal)
<n1> -lt <n2> Истина, если число <n1> строго меньше <n2> (less then)
Объединение условий
-a И (and)
-o Или (or)
! инвертирование проверки
(...) группирование для операторов «и» или «или»

Для команды test(1) существует альтернативное имя [. Если она вызывается по имени [, то она разбирает командную строку вплоть до того, пока не встретит закрывающую квадратную скобку. Таким образом, следующие четыре конструкции эквивалентны:

$ test -d /usr/ports && echo "найдено дерево портов" || echo "Дерево портов не найдено"
$ [ -d /usr/ports ] && echo "найдено дерево портов" || echo "Дерево портов не найдено"
$ if test -d /usr/ports
> then echo "найдено дерево портов"
> else echo "Дерево портов не найдено"
> fi
$ if [ test -d /usr/ports ]
> then echo "найдено дерево портов"
> else echo "Дерево портов не найдено"
> fi

Обратите внимание: вокруг квадратных скобок обязательно должны быть пробелы, потому что [ это не синтаксическая конструкция sh(1), а обычная команда на подобии test(1).

Еще примеры. Проверка, существует ли файл:
if test -f filename
then
   ... действия, если файл filename существует
fi

Проверка переменной $timecnt на ноль:
if test $timecnt -ne 0
then
   ... действия, если $timecnt не равна нулю
fi

Внимание! При тестировании текстовых переменных обязательно берите эту переменную (или переменные) в двойные кавычки, например так неправильно:
if test $ipnatrules_curr != $ipnatrules_file
then
   ...
а так правильно:
if test "$ipnatrules_curr" != "$ipnatrules_file"
then
   ...

 

Добавить комментарий


Защитный код
Обновить

Top of Page