Опубликован: 15.06.2004 | Доступ: свободный | Студентов: 2560 / 712 | Оценка: 4.35 / 3.96 | Длительность: 27:47:00
ISBN: 978-5-9556-0011-6
Лекция 2:

Язык shell

В управляющих конструкциях if и while часто используется команда test, она проверяет некоторое условие и вырабатывает нулевой или ненулевой код завершения в зависимости от того, оказалось ли условие, соответственно, истинным или ложным. Команда записывается любым из двух способов:

test  условие

или употребив пару квадратных скобок:

[ условие ]

Условие может включать, помимо прочих, следующие примитивы:

-r файл

Истина, если файл существует и доступен для чтения.

-w файл

Истина, если файл существует и доступен для записи.

-x файл

Истина, если файл существует и является выполнимым.

-f файл

Истина, если файл существует и является обычным файлом.

-d файл

Истина, если файл существует и является каталогом.

-c файл

Истина, если файл существует и является специальным символьным файлом.

-b файл

Истина, если файл существует и является специальным блочным файлом.

-p файл

Истина, если файл существует и является именованным каналом.

-s файл

Истина, если файл существует и имеет ненулевой размер.

-n s1

Истина, если цепочка символов s1 имеет ненулевую длину.

s1 = s2

Истина, если цепочки символов s1 и s2 равны.

s1 != s2

Истина, если цепочки символов s1 и s2 не равны.

n1 -eq n2

Истина, если целые числа n1 и n2 алгебраически равны. На месте -eq могут быть также операции сравнения -ne (не равно), -gt (больше), -ge (больше или равно), -lt (меньше), -le (меньше или равно).

Примитивы комбинируются с помощью круглых скобок, а также следующих операций (в порядке уменьшения приоритета):

! Унарная операция отрицания
-a Логическое И.
-o Логическое ИЛИ.

Обратим внимание на то, что квадратные скобки, обрамляющие условие, и каждый компонент условия должны быть выделены пробелами.

Приведем пример использования управляющей конструкции if. В процессе загрузки практически любой разновидности ОС Unix выполняются строки следующего или близкого вида (см. листинг 2.19):

if [ -s ${f} ]
then
 /bin/sh ${f} start
fi
Листинг 2.19. Пример условного оператора.

Если файл, имя которого является значением переменной f, существует и имеет ненулевой размер, он выполняется с аргументом start.

В качестве примера употребления конструкции case приведем еще один фрагмент, типичный для процесса загрузки системы (см. листинг 2.20):

case "$1" in
start)
 start
 ;;
stop)
 stop
 ;;
reload | restart)
 restart
 ;;
condrestart)
 if [ -f /var/lock/subsys/atd ]
 then
   restart
 fi
 ;;
*)
 echo $"Usage: $0 {start | stop | restart | condrestart}"
 exit 1
esac
Листинг 2.20. Пример оператора выбора.

Известные значения первого аргумента распознаются, в ответ на все прочие (шаблон *) сообщается, как пользоваться данной shell-процедурой.

Следующий пример иллюстрирует определение и вызов функции (см. листинг 2.21).

echo $# $1
f ( ) {
 echo $# $1
}
f a b
f b
echo $# $1
Листинг 2.21. Пример определения и вызова функции.

Если данный текст хранится в файле g, то по окончании выполнения команды (вызов shell-процедуры, содержащей функцию)

g c d e

будет выдан следующий результат:

3 c
2 a
1 b
3 c
Антон Коновалов
Антон Коновалов

В настоящее время актуальный стандарт - это POSIX 2008 и его дополнение POSIX 1003.13
Планируется ли актуализация материалов данного очень полезного курса?