Основы операционной системы 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




Содержание  Назад  Вперед