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 |
Более сложные выражения могут быть образованы с помощью логических операторов:
!выражение |
Истинно, если выражение ложно (оператор NOT) |
выражение1 -а выражение2 |
Истинно, если оба выражения истинны (оператор AND) |
выражение1 -o выражение2 |
Истинно, если хотя бы одно из выражений истинно (оператор OR) |