Чтение онлайн

на главную - закладки

Жанры

Linux: Полное руководство

Аллен Питер В.

Шрифт:

В шаблонах могут использоваться метасимволы *, ? и [] (о подстановке метасимволов сказано в п.3.4.5). С их помощью можно организовать инструкцию, действующую как default в операторе switch языка С.

Порядок сравнения шаблонов со значением не определен. Первое совпадение прекращает дальнейшее сравнение и приводит к выполнению соответствующего списка команд и выходу из структуры case — поведение, больше похожее на поведение оператора case в языке Паскаль, чем на switch в языке С.

Листинг 8.1. Пример использования оператора case

echo "Ошибка. Кому переслать протокол?"

echo "Начальнику: b"

echo "Коллегам:
с"

echo "Сам разберусь: any key"

read answer

case $answer in

b|B) mail -s "error log" boss < error.log;;

c|C) mail -s 'Help!!! error log' -c ivan den < error.log;;

*) echo "OK. Exiting";

 exit;;

esac

Обратите внимание на апострофы вместо кавычек во втором списке: они экранируют подстроку «!!» от подстановки предыдущей команды.

Условный оператор if

Синтаксис:

if список1 then

 список2

[elif список3 then

 список4]

[else

 список5]

fi

Эта конструкция работает так же, как в других языках программирования. Сначала выполняются команды из

списка1
. Если этот список выполнен успешно, то есть с кодом завершения 0, то выполняется
список2
, если нет — то список, стоящий после очередного elif. При невозможности выполнить список команд, стоящий после очередного then, выполняется список, стоящий после else.

Можно использовать сокращенный вариант, только if-then-fi:

$ if [ $?
– ne 0 ]; then echo "Ошибка. Смотри протокол"; fi;

Оператор test и условные выражения

В вышеприведенной команде вместо анализа кода завершения списка использована проверка условия. Две формы такой проверки эквивалентны: встроенная команда test и [условие]. Например, для проверки существования файла можно написать

test -e <файл>

или

[ -е <файл> ]

Если вместо слова test используются квадратные скобки, они обязательно должны быть отделены от аргументов пробелом, потому что на самом деле «[» — это название команды, а «]» — обязательный последний аргумент этой команды.

В случае истинности условия команда test возвращает код успешного завершения, то есть 0; в случае ложности — код ошибки 1 (не спутайте с обычными языками программирования, где 1 — другое имя для true!).

Команда test может проверять и строку на пустоту: непустая строка считается выполнением условия и приводит к коду завершения 0. Пример:

$ test $USER; echo $?

0

$ test $VAR_not_set_yet; echo $?

1

Условные выражения можно комбинировать с помощью обычных логических операций:

♦ 

!(выражение)
— отрицание;

♦ 

выражение1 -а выражение2
— логическое И (and);

♦ 

выражение1 -о выражение2
— логическое ИЛИ (or).

Элементарные условные выражения перечислены в таблицах 8.2 и 8.3. Полный список их можно получить по команде

help test
.

Основные условные выражения

для файлов Таблица 8.2

Выражение Истинно, если
– d файл файл существует и является каталогом
– е файл файл существует
– f файл файл существует и является обычным файлом
– L файл файл существует и является символической ссылкой
– r файл файл существует и доступен для чтения
– w файл файл существует и доступен для записи
– x файл файл существует и является исполняемым
– s файл файл существует и его размер больше 0
– N файл файл существует и изменился со времени последнего чтения
файл1 -nt файл2 время модификации файла1 позже (newer than), чем файла2
файл1 -ot файл2 время модификации файла1 раньше (older than), чем файла2
файл1 -ef файл2 файл1 — это жесткая ссылка на файл2

Элементарные условные выражение для сравнения строк Таблица 8.3

Выражение Истинно, если
– z строка длина строки равна 0
– n строка длина строки не равна 0
стр1 == стр2 строки совпадают
стр1 !== стр2 строки не совпадают
стр1 < стр2 строка1 предшествует строке2 в лексикографическом порядке. Алфавит соответствует текущей локали
стр1 > стр2 строка1 следует за строкой2 в лексикографическом порядке

Арифметическое условное выражение имеет формат

arg1 OP arg2
, где
arg1
и
arg2
 — целые числа, a
OP
— одна из операций:

♦ – eq — равно;

♦ – ne — не равно;

♦ – lt — меньше;

♦ – le — меньше или равно;

♦ – gt — больше;

♦ – ge — больше или равно.

Таким образом, можно переписать предыдущий пример с использованием оператора if:

Листинг 8.2. Пример использования оператора if

echo "Ошибка. Кому переслать протокол?"

echo "Начальнику: b"

echo "Коллегам: c"

echo "Сам разберусь; any key"

read answer

if [ "$answer" == "b" -o "$answer" == "B" ]; then

 mail -s "error log" boss < error.log;

elif [ "$answer" == "с" -о "$answer" == "C" ]; then

 mail -s 'Help!!! error log' -c ivan den < error.log;

Поделиться:
Популярные книги

Мечник Вернувшийся 1000 лет спустя. Том 2

Ткачев Андрей Юрьевич
2. Вернувшийся мечник
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Мечник Вернувшийся 1000 лет спустя. Том 2

Как я строил магическую империю 11

Зубов Константин
11. Как я строил магическую империю
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Как я строил магическую империю 11

Искатель 9

Шиленко Сергей
9. Валинор
Фантастика:
рпг
фэнтези
попаданцы
гаремник
5.00
рейтинг книги
Искатель 9

Наследие Маозари 8

Панежин Евгений
8. Наследие Маозари
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
постапокалипсис
рпг
фэнтези
эпическая фантастика
5.00
рейтинг книги
Наследие Маозари 8

Петля, Кадетский корпус. Книга первая

Алексеев Евгений Артемович
1. Петля
Фантастика:
боевая фантастика
попаданцы
аниме
6.11
рейтинг книги
Петля, Кадетский корпус. Книга первая

Ермак. Телохранитель

Валериев Игорь
2. Ермак
Фантастика:
альтернативная история
7.50
рейтинг книги
Ермак. Телохранитель

Последний Паладин. Том 13

Саваровский Роман
13. Путь Паладина
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 13

Петля, Кадетский Корпус. Книга пятая

Алексеев Евгений Артемович
5. Петля
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Петля, Кадетский Корпус. Книга пятая

Чужак из ниоткуда 5

Евтушенко Алексей Анатольевич
5. Чужак из ниоткуда
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
фэнтези
5.00
рейтинг книги
Чужак из ниоткуда 5

Тринадцатый XI

NikL
11. Видящий смерть
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Тринадцатый XI

Охотник на демонов

Шелег Дмитрий Витальевич
2. Живой лёд
Фантастика:
боевая фантастика
5.83
рейтинг книги
Охотник на демонов

Академия

Сай Ярослав
2. Медорфенов
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Академия

Воронцов. Перезагрузка. Книга 5

Тарасов Ник
5. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
6.00
рейтинг книги
Воронцов. Перезагрузка. Книга 5

Вперед в прошлое 3

Ратманов Денис
3. Вперёд в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 3