Проверка условий в командном интерпретаторе
Команда test имеет следующий синтаксис:
<команда test> ::=
test <выражение> | [ <выражение> ]
Выражение строится из примитивов, представленных в , при необходимости, с помощью следующих операторов:
! | Унарный оператор отрицания. |
-a | Бинарный оператор "и". |
-o | Бинарный оператор "или". |
(<выражение>) | Скобки для группировки. Учтите, что скобки распознаются командным интерпретатором, поэтому их надо брать в кавычки. |
Таблица 26. Основные примитивы команды test
Примитив | Условие |
-r файл | файл существует и доступен для чтения |
-w файл | файл существует и доступен для записи |
-x файл | файл существует и является выполняемым |
-f файл | истина, если файл существует и является обычным файлом (не каталогом) |
-d файл | файл существует и является каталогом |
-h файл | файл существует и является символьной связью |
-s файл | файл существует и не пуст |
-t [ дескриптор ] | истина, если открытый файл с указанным дескриптором (по умолчанию, 1) ассоциирован с терминалом |
-z s1 | истина, если строка s1 имеет нулевую длину |
-n s1 | истина, если строка s1 имеет ненулевую длину |
s1 = s2 | истина, если строки s1 и s2 идентичны |
s1 != s2 | истина, если строки s1 и s2 не совпадают |
s1 | истина, если строка s1 непустая |
n1 -eq n2 | сравнение целых чисел на равенство (=). Можно использовать также и другие сравнения: -ne (!=), -gt (>), -ge (>=), -lt (<) и -le (<=). |
Рассмотрим пример использования условного оператора и команды test:
$ cat which # which cmd: Безопасная версия сценария для выдачи каталога, # из которого будет вызываться выполняемая программа
opath=$PATH PATH=/usr/bin
# Это гарантирует использование настоящих команд # echo, sed и test в любом случае!
case $# in 0) echo 'Usage: which command' 1>&2; exit 2 esac
for i in `echo $opath | sed 's/^:/.:/ s/::/:.:/g s/:$/:./ s/:/ /g'` do if test -x $i/$1 then echo $i/$1 exit 0 # команда найдена fi done exit 1 # не найдена $ which sed ./sed $ which which ./which