Linux-сервер своими руками
Шрифт:
Общий синтаксис конструкции if-fi:
Конструкция if-fi работает так же, как и в других языках программирования. Если список1 (условие) истинный, выполняется список1, иначе выполняется список3 и проверяется его истинность и т.д. Допускается неограниченная вложенность операторов if. Например:
Можно использовать сокращенный вариант:
Например:
Вместо списка команд удобно использовать команду test или выражение [условие]. Например, следующие выражения аналогичны:
И первое, и второе выражение проверяют существование файла /etc/passwd. Другие опции команды test представлены в табл. 19.38.
Опции команды test Таблица 19.38
Опция | Возвращаемое значение и описание |
---|---|
– d файл | Истина, если файл существует и является каталогом |
– е файл | Истина, если файл существует |
– f файл | Истина, если файл существует и является простым файлом |
– k файл | Истина, если файл существует и для него установлен бит односторонней операции |
– L файл | Истина, если файл существует и является ссылкой |
– r файл | Истина, если файл существует и доступен для чтения |
– s файл | Истина, если файл существует и его размер больше 0 |
– х файл | Истина, если файл существует и является исполнимым |
– w файл | Истина, если файл существует и доступен для записи |
– о файл | Истина, если файл существует и принадлежит данному пользователю |
– z строка | Истина, если длина строки равна 0 |
– n строка | Истина, если длина строки не равна 0 |
Команда test, в случае успешного завершения, возвращает значение истина, то есть 0 — успешное завершение. Если в скобках стоит непустое слово, test возвратит тоже 0, например:
В первом случае возвращается истина (true), на экран выводится ноль — код удачного (безошибочного) завершения программы. Во втором случае на экран выводится единица — команда test возвратила значение ложь (false). Сравнение строк осуществляется следующим образом: выражения str1 = str2 или str1 == str2 истинны, когда строки str1 и str2 равны. Обратите внимание: между двумя символами равно не должно быть пропуска!
Символ ! инвертирует любое условие команды test, например, выражение str1 != str2 будет истинным, когда строки str1 и str2 не равны между собой. Символ ! является символом логической
0
1
В первом случае непустая строка str возвращает истину, опция —f возвращает также истину, потому что файл /etc/passwd существует всегда. Результат операции И: истина И истина = истина, поэтому на экране вы увидите 0.
Во втором случае пустая строка str возвратит ложь, а опция –f возвращает истину. Результат операции И: ложь И истина = ложь. Если вы забыли законы логики, освежите свои знания с помощью табл. 19.39.
Логические операции Таблица 19.39
AND | True | False | OR | True | False | XOR | True | False |
---|---|---|---|---|---|---|---|---|
True | True | False | True | True | True | True | False | True |
False | False | False | False | True | False | False | True | False |
Операция XOR — это исключающее ИЛИ. Данная операция не используется при создании сценариев с помощью интерпретатора bash.
Для сравнения целых чисел используются опции команды test,приведенные в табл. 19.40.
Сравнение целых чисел Таблица 19.40
Опция | Описание |
---|---|
– eq | Равно |
– ne | Не равно |
– It | Меньше |
– gt | Больше |
– le | Меньше или равно |
– ge | Больше или равно |
Интерпретатор bash воспринимает строки, как целые числа. Если нужно обнулить строку, то это достигается таким присваиванием: х=0.
Пример.
Поскольку 111 меньше, чем 124, на экране вы увидите 0 (истина).
Примечание. Во всех примерах, вы, наверное, заметили использование команды export. Это необходимо для того, чтобы порожденному процессу (не забывайте: test — это отдельная программа) переменнаях была доступна.
Теперь, когда мы уже знакомы с конструкциями test и if, рассмотрим небольшой пример, демонстрирующий вложенность операторов if и использование команды test. Пример приведен в листинге 19.2.