Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 1-8 / ОС_07.doc
Скачиваний:
93
Добавлен:
04.04.2013
Размер:
114.69 Кб
Скачать

4.10. Команда test

Формат команды:

test <выражение>

Команда test вычисляет <выражение> и, если его значение ИСТИНА, возвращает код завершения 0 (True); иначе – ненулевое значение (false).

Используется :

  • для сравнения строк и чисел;

  • для проверки состояния файла;

  • в операторе if.

4.10.1. Cравнение строк

Формат команды test для сравнения строк:

%test строка1=строка2 # проверка на равенство

%test строка1!=строка2 # проверка на неравенство

Пример_1: проверка регистрационного имени пользователя

%test "$LOGNAME"!="fomin"

Пример_2: проверка на пустой аргумент команды

%test "$1"=""

Пример_3: проверка дня недели:

%test "`date+%a`"="Wed"

Здесь date+%a –команда получения текущей даты, в которой форматная строка (+%a) ограничивает вывод команды только названием дня недели.

4.10.2. Cравнение чисел

Формат команды test для сравнения чисел:

test число1 <оператор> число2

Операторы указываются в соответствии со следующей таблицей:

Наименование оператора

Математический вид оператора

Оператор в команде test

равно

-eq

не равно

-ne

меньше

<

-lt

меньше или равно

-le

больше

>

-gt

больше или равно

-ge

Пример_1: проверка кода возврата последней выполненной команды на 0.

test "$?" -eq 0

Пример_2: проверка текущей даты на 20 число

test "`date+%d`" -eq 20

Здесь date+%d –команда получения текущей даты, в которой форматная строка (+%d) ограничивает вывод команды только числом.

4.10.3. Проверка состояния файла

В случае использования команды test для проверки состояния файла <выражение> может состоять из следующих примитивов:

-r файл - истина если файл существует и доступен для чтения;

-w файл - истина если файл существует и доступен для записи;

-x файл - истина если файл существует и доступен для выполнения;

-f файл - истина если файл существует и является обычным файлом;

-d файл - истина если файл существует и является каталогом;

-c файл - истина если файл существует и является специальным символьно-ориентированным файлом;

-b файл - истина если файл существует и является специальным блок-ориентированным файлом.

4.10.4. Использование команды test в операторе if

Команда test часто используется в составе условного оператора в командных процедурах.

if [test "`date+%d`" -eq 24]

then

echo OK

fi

4.11. Управляющие конструкции высокого уровня

4.11.1. Условный оператор (if)

Формат простого оператора if:

if условие

then

команда

команда

. . . . . . .

fi

Если условие истинно (True), команды, которые находятся между служебными словами then и fi будут исполнены, в противном случае они будут пропущены.

Условие представляет собой некоторое выражение, которое может быть заключено в квадратные скобки:

[условное_выражение]

Кроме того, в выражении могут применяться операторы a (AND) и o (OR).

Пример:

[$i –gt 7 –a $i –le 99]

По сути мы использовали команду test, однако применение квадратных скобок позволяет не указывать имени команды.

Приведенное выражение будет верно только в том случае, если переменная i > 7 и i ≤ 99.

Формат расширенного оператора if:

if условие

then

команда

команда

. . . . . . .

else

команда

команда

. . . . . . .

fi

Пример_1: Командная процедура (назовём её who2), выводящая сведения о работе в данный момент одного из зарегистрированных в системе пользователей.

if

who | grep "$1" > /dev/null

then

echo "$1 is logged on"

else

echo "$1 is not logged on"

fi

Запуск командной процедуры предполагает задание имени пользователя в качестве параметра:

%who2 petrov

если пользователь petrov работает в системе в момент запуска процедуры who2, то будет выведено сообщение

petrov is logged on (Петров вошёл в систему)

в противном случае будет выведено сообщение

petrov is not logged on (Петров не вошёл в систему)

В качестве условия в команде if используется конвейер из двух команд:

who - выводит в стандартный вывод сведения о работающих в настоящее время пользователях с указанием времени входа в систему;

grep – пропускает на выход только те строки из вывода команды who, в которых встречается заданный в качестве формального параметра $1 имени пользователя.

Пример_2: Вывести напоминание об уплате налогов.

if

test "`date+%d`" -eq 1

then

echo pay bills

fi

Соседние файлы в папке Лекции 1-8