Аллен Питер В.
Шрифт:
или
Если вместо слова test используются квадратные скобки, они обязательно должны быть отделены от аргументов пробелом, потому что на самом деле «[» — это название команды, а «]» — обязательный последний аргумент этой команды.
В случае истинности условия команда test возвращает код успешного завершения, то есть 0; в случае ложности — код ошибки 1 (не спутайте с обычными языками программирования, где 1 — другое имя для true!).
Команда test может проверять и строку на пустоту: непустая строка считается выполнением условия и приводит к коду завершения 0. Пример:
Условные выражения можно комбинировать с помощью обычных логических операций:
♦
♦
♦
Элементарные условные выражения перечислены в таблицах 8.2 и 8.3. Полный список их можно получить по команде
Основные условные выражения для файлов Таблица 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 в лексикографическом порядке |
Арифметическое условное выражение имеет формат
♦ – eq — равно;
♦ – ne — не равно;
♦ – lt — меньше;
♦ – le — меньше или равно;
♦ – gt — больше;
♦ – ge — больше или равно.
Таким образом, можно переписать предыдущий пример с использованием оператора if:
Листинг 8.2. Пример использования оператора if
Командные интерпретаторы bash и ksh поддерживают циклы типа for, while, until и select, а интерпретатор sh — только циклы for и while.
Синтаксис:
В результате подстановки шаблона получается список слов. Переменная получает значение первого слова из этого списка, и выполняется список команд, стоящий между do и done. Затем переменная получает значение очередного слова из списка слов, и снова выполняется список команд. Повторение прекращается по исчерпании слов в списке. Отсутствие конструкции [in шаблон] эквивалентно записи in $@.
Список слов можно сформировать и вручную: