Операционная система UNIX - Страница 23

Изменить размер шрифта:

fi

Команды

command1
,
command2
и т.д. будут выполнены, если истинно
условие
. Условие может генерироваться одной или несколькими командами. По существу, ложность или истинность условия определяется кодом возврата последней выполненной команды. Например:

if grep sergey /etc/passwd >/dev/null 2>&1

then

 echo пользователь sergey найден в файле паролей

fi

Если слово sergey будет найдено программой grep(1) в файле паролей (код возврата grep(1) равен 0), то будет выведено соответствующее сообщение.

Возможны более сложные формы оператора if.

set `who -r`

Установим позиционные параметры равными значениям полей вывода программы who(1)

if [ "$9" = "S" ]

Девятое поле вывода — предыдущий уровень выполнения системы; символ 'S' означает однопользовательский режим

then

 echo Система загружается

elif [ "$7" = "2" ]

Седьмое поле — текущий уровень

 echo Переход на уровень выполнения 2

else

 echo Переход на уровень выполнения 3

fi

Данный фрагмент скрипта проверяет уровень выполнения, с которого система совершила переход, и текущий уровень выполнения системы. Соответствующие сообщения выводятся на консоль администратора. В этом фрагменте условие генерируется командой test, эквивалентной (и более наглядной) формой которой является "[]". Команда test является наиболее распространенным способом генерации условия для оператора if.

Команда test

Команда test имеет следующий синтаксис:

test выражение

или

[ выражение ]

Команда вычисляет логическое выражение (табл. 1.10) и возвращает 0, если выражение истинно, и 1 в противном случае.

Таблица 1.10. Выражения, используемые в команде test

Выражения с файлами
-s file
Размер файла
file
больше 0
-r file
Для файла
file
разрешен доступ на чтение
-w file
Для файла
file
разрешен доступ на запись
-x file
Для файла
file
разрешено выполнение
-f file
Файл
file
существует и является обычным файлом
-d file
Файл
file
является каталогом
file
Файл
file
является специальным файлом символьного устройства
-b file
Файл
file
является специальным файлом блочного устройства
file
Файл
file
является поименованным каналом
-u file
Файл
file
имеет установленный флаг SUID
-g file
Файл
file
имеет установленный флаг SGID
-k file
Файл
file
имеет установленный флаг sticky bit
Выражения со строками
-z string
Строка
string
имеет нулевую длину
-n string
Длина строки
string
больше 0
string1 = string2
Две строки идентичны
string1 != string2
Две строки различны
Сравнение целых чисел
i1 -eq i2
i1
равно
i2
i1 -ne i2
i1
не равно
i2
i1 -lt i2
i1
строго меньше
i2
i1 -le i2
i1
меньше или равно
i2
i1 -gt i2
i1
строго больше
i2
i1 -ge i2
i1
больше или равно
i2
Оригинальный текст книги читать онлайн бесплатно в онлайн-библиотеке Knigger.com