Linux: Полное руководство
Шрифт:
В шаблонах могут использоваться метасимволы *, ? и [] (о подстановке метасимволов сказано в п.3.4.5). С их помощью можно организовать инструкцию, действующую как default в операторе switch языка С.
Порядок сравнения шаблонов со значением не определен. Первое совпадение прекращает дальнейшее сравнение и приводит к выполнению соответствующего списка команд и выходу из структуры case — поведение, больше похожее на поведение оператора case в языке Паскаль, чем на switch в языке С.
Листинг 8.1. Пример использования оператора case
Обратите внимание на апострофы вместо кавычек во втором списке: они экранируют подстроку «!!» от подстановки предыдущей команды.
Синтаксис:
Эта конструкция работает так же, как в других языках программирования. Сначала выполняются команды из
Можно использовать сокращенный вариант, только if-then-fi:
– ne 0 ]; then echo "Ошибка. Смотри протокол"; fi;
В вышеприведенной команде вместо анализа кода завершения списка использована проверка условия. Две формы такой проверки эквивалентны: встроенная команда test и [условие]. Например, для проверки существования файла можно написать
или
Если вместо слова test используются квадратные скобки, они обязательно должны быть отделены от аргументов пробелом, потому что на самом деле «[» — это название команды, а «]» — обязательный последний аргумент этой команды.
В случае истинности условия команда test возвращает код успешного завершения, то есть 0; в случае ложности — код ошибки 1 (не спутайте с обычными языками программирования, где 1 — другое имя для true!).
Команда test может проверять и строку на пустоту: непустая строка считается выполнением условия и приводит к коду завершения 0. Пример:
Условные выражения можно комбинировать с помощью обычных логических операций:
♦
♦
♦
Элементарные условные выражения перечислены в таблицах 8.2 и 8.3. Полный список их можно получить по команде
Основные условные выражения
Выражение | Истинно, если |
---|---|
– 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 в лексикографическом порядке |
Арифметическое условное выражение имеет формат
♦ – eq — равно;
♦ – ne — не равно;
♦ – lt — меньше;
♦ – le — меньше или равно;
♦ – gt — больше;
♦ – ge — больше или равно.
Таким образом, можно переписать предыдущий пример с использованием оператора if:
Листинг 8.2. Пример использования оператора if