Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы OC UNIX_часть3.doc
Скачиваний:
21
Добавлен:
18.04.2015
Размер:
543.23 Кб
Скачать

3.6. Контрольные вопросы

  1. Перечислите позиционные переменные?

  2. Что такое кода завершения процесса?

  3. Какие значения может принимать код завершения?

  4. Какие утилиты вырабатывают только код завершения?

  5. Перечислите основные приемы композиции команд?

Глава 4. Программные структуры

4.1. Команда test

Команда testпроверяет выполнение некоторого условия. С использованием этой (встроенной) команды формируются операторы выбора и цикла языкаshell.

Существует два возможных варианта синтаксиса команды:

test условие

или

[ условие ]

Мы будем использовать второй вариант, т.е. вместо того, чтобы писать перед условием слово "test", будем заключать условие в скобки, что более привычно для программистов.

На самом деле shellбудет распознавать эту команду по открывающей скобке "[", как слову, соответствующему команде "test". Уже этого достаточно, чтобы предупредить о распространенной ошибке начинающих – между скобками и содержащимся в них условием обязательно должны быть пробелы.

Пробелы должны быть и между значениями и символом сравнения или операции (как, кстати, и в команде "expr", рассмотренной в следующем параграфе). Не путать с противоположным требованием для присваивания значений переменным.

В shellкомандаtestможет быть использована для анализа трех объектов:

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

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

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

4.1.1. Условия проверки файлов

Команда testможет использоваться для проверки существования файлов и каталогов и установленных для них полномочий. Для этого используется следующий синтаксис:

test –rwfds имя_файла

–r– файл имеет разрешение на чтение файла;

–w– файл имеет разрешение на запись в файл;

–x– файл можно выполнять;

–f– файл является обычным файлом;

–d– файл является каталогом;

–с– файл является специальным файлом;

–s– размер файла отличен от нуля, т.е. он не пустой.

В каждом случае команда возвращает нулевое значение, если проверка дает положительный (истинный) результат, и ненулевое значение, если – отрицательный (ложный).

Эта команда дает широкий спектр возможностей проверки файлов, которые следует выполнять в сценарии перед потенциально недопустимыми операциями.

Например, имеется сценарий копирования файлов. Пользователь указывает два файловых аргумента:источникиприемник.

В сценарии к этим аргументам можно обращаться как $1и$2. В позиционном параметре$#хранится количество аргументов. Тогда с помощью командыtestможно протестировать следующее:

  • проверка test«$1» = «$2» позволяет предотвратить случайное копирование;

  • проверка test –f «$1» позволяет проверить, является ли исходный файл (источник) файлом (т.е. не каталогом);

  • проверка test–d«$2» позволяет увидеть, является ли приемник каталогом.

Например, вводя с клавиатуры командные строки в первом случае получим подтверждение (код завершения "0"), а во втором – опровержение (код завершения "1")."specific" – имя существующего файла.

[ –f specific ] ; echo $?

0

[ –d specific ] ; echo $?

1

4.1.2. Условия проверки строк

Команда testможет сравнить две строки. Для этого используется следующий синтаксис:

test –n <string> – существование цепочки символов (строка не пустая);

test –z <string>– отсутствие цепочки символов (строка пустая);

test <string_1> = <string_2>– равенство двух цепочек символов;

test <string_1> != <string_2>– неравенство двух цепочек символов.

Например: переменнойquitприсвоено пустое значение.

$ quit=

$ test –n “$quit”

$ echo $?

1

$ test –z “$quit”

$ echo $?

0

Например, переменнойquitприсвоено значение – пробел.

$ quit=” ”

$ test –n “$quit”

$ echo $?

0

$ test –z “$quit”

$ echo $?

1

Например:

x=abc ; [ abc = "$x" ] ; echo $?

0

x=abc ; [ –n "$x" ] ; echo $?

0

x="" ; [ –n "$x" ] ; echo $?

1

Примечание: команда "test" дает значение "истина" (т.е. код завершения "0"), если в скобках стоит непустое слово.

[ privet ] ; echo $?

0

[ ] ; echo $?

1