Основы операционной системы UNIX

       

Проверка условий в командном интерпретаторе


Команда 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



Содержание раздела