Операционная система UNIX
fiКоманды
,<i>command1</i>и т.д. будут выполнены, если истинно<i>command2</i>. Условие может генерироваться одной или несколькими командами. По существу, ложность или истинность условия определяется кодом возврата последней выполненной команды. Например:<i>условие</i>if grep sergey /etc/passwd >/dev/null 2>&1thenecho пользователь sergey найден в файле паролейfiЕсли слово sergey будет найдено программой grep(1) в файле паролей (код возврата grep(1) равен 0), то будет выведено соответствующее сообщение.
Возможны более сложные формы оператора if.
set `who -r`Установим позиционные параметры равными значениям полей вывода программы who(1)
if [ "$9" = "S" ]Девятое поле вывода — предыдущий уровень выполнения системы; символ 'S' означает однопользовательский режим
thenecho Система загружаетсяelif [ "$7" = "2" ]Седьмое поле — текущий уровень
echo Переход на уровень выполнения 2elseecho Переход на уровень выполнения 3fiДанный фрагмент скрипта проверяет уровень выполнения, с которого система совершила переход, и текущий уровень выполнения системы. Соответствующие сообщения выводятся на консоль администратора. В этом фрагменте условие генерируется командой test, эквивалентной (и более наглядной) формой которой является "[]". Команда test является наиболее распространенным способом генерации условия для оператора if.
Команда test
Команда test имеет следующий синтаксис:
test <i>выражение</i>или
[ <i>выражение</i> ]Команда вычисляет логическое выражение (табл. 1.10) и возвращает 0, если выражение истинно, и 1 в противном случае.
Таблица 1.10. Выражения, используемые в команде test
Выражения с файлами -s <i>file</i>Размер файла больше 0<i>file</i>-r <i>file</i>Для файла разрешен доступ на чтение<i>file</i>-w <i>file</i>Для файла разрешен доступ на запись<i>file</i>-x <i>file</i>Для файла разрешено выполнение<i>file</i>-f <i>file</i>Файл существует и является обычным файлом<i>file</i>-d <i>file</i>Файл является каталогом<i>file</i>-с <i>file</i>Файл является специальным файлом символьного устройства<i>file</i>-b <i>file</i>Файл является специальным файлом блочного устройства<i>file</i>-р <i>file</i>Файл является поименованным каналом<i>file</i>-u <i>file</i>Файл имеет установленный флаг SUID<i>file</i>-g <i>file</i>Файл имеет установленный флаг SGID<i>file</i>-k <i>file</i>Файл имеет установленный флаг sticky bit<i>file</i>Выражения со строками -z <i>string</i>Строка имеет нулевую длину<i>string</i>-n <i>string</i>Длина строки больше 0<i>string</i><i>string1</i> = <i>string2</i>Две строки идентичны <i>string1</i> != <i>string2</i>Две строки различны Сравнение целых чисел <i>i1</i> -eq <i>i2</i> равно<i>i1</i><i>i2</i><i>i1</i> -ne <i>i2</i> не равно<i>i1</i><i>i2</i><i>i1</i> -lt <i>i2</i> строго меньше<i>i1</i><i>i2</i><i>i1</i> -le <i>i2</i> меньше или равно<i>i1</i><i>i2</i><i>i1</i> -gt <i>i2</i> строго больше<i>i1</i><i>i2</i><i>i1</i> -ge <i>i2</i> больше или равно<i>i1</i><i>i2</i>