Bash: Условие if .. else

В этом учебнике вы узнаете об основах оператора Bash условие if и научитесь использовать его в своих сценариях оболочки.

Принятие решений - одна из самых фундаментальных концепций компьютерного программирования. Как и в любом другом языке программирования, операторы if, if..else, if..elif..else и вложенные операторы if в Bash используются для выполнения кода на основе определенного условия.

Условие if

Условные выражения Bash if могут иметь различные формы. Самый простой оператор if имеет следующую форму:

Оператор if начинается с ключевого слова if, за которым следует условное выражение и ключевое слово then. Оператор заканчивается ключевым словом fi.

Если значение TEST-COMMAND равно True, то выполняется операторы между then и fi. Если TEST-COMMAND возвращает False, ничего не происходит; команды игнорируется.

В целом, хорошей практикой является отступ от текста и разделение блоков кода пустыми строками. Большинство людей предпочитают использовать отступы в 4 или 2 интервала. Отступы и пустые строки делают ваш код более читабельным и организованным.

Рассмотрим следующий пример сценария, который проверяет, больше ли заданное число 10:

Сохраните код в файле и запустите его из командной строки:

Сценарий предложит вам ввести число. Если, например, вы введете 15, команда test примет значение true, поскольку 15 больше 10, и будет выполнена команда echo в предложении then.

Утверждение if..else

Оператор Bash if...else имеет следующую форму:

Если TEST-COMMAND выдает значение True, то будет выполнена команда1. В противном случае, если TEST-COMMAND возвращает значение False, будет выполнено команда2. В операторе может быть только одно предложение else

Давайте добавим предложение else к предыдущему примеру сценария:

Если вы запустите код и введете число, сценарий выведет другое сообщение в зависимости от того, больше или меньше/равно 10 это число.

Утверждение if..elif..else

Оператор Bash if..elif..else имеет следующую форму:

Если значение команды TEST-COMMAND1 равно True, будет выполнено команда1. Если значение TEST-COMMAND2 равно True, будет выполнено команда2. Если ни одна из тестовых команд не имеет значения True, то выполняется команда3.

В операторе может быть один или несколько пунктов elif. Предложение else является необязательным.

Условия оцениваются последовательно. Если условие возвращает значение True, остальные условия не выполняются, а управление программой переходит к концу оператора if.

Давайте добавим к предыдущему сценарию условие elif:

Вложенные операторы if

Bash позволяет вложить операторы if внутрь операторов if. Вы можете поместить несколько операторов if внутри другого оператора if.

Следующий сценарий попросит вас ввести три числа и выведет наибольшее число из этих трех чисел.

Множественные условия

Логические операторы OR и AND позволяют использовать несколько условий в операторах if.

Вот еще одна версия сценария для печати наибольшего числа из трех чисел. В этой версии вместо вложенных операторов if мы используем логический оператор AND (&&).

Операторы теста

В Bash команда test принимает одну из следующих синтаксических форм:

Чтобы сделать сценарий переносимым, предпочитайте использовать старую команду test [, которая доступна во всех оболочках POSIX. Новая обновленная версия команды test [[ (двойные скобки) поддерживается на большинстве современных систем, использующих Bash, Zsh и Ksh в качестве оболочки по умолчанию.

Чтобы отрицать выражение test, используйте логический оператор NOT (!). При сравнении строк всегда используйте одинарные или двойные кавычки, чтобы избежать проблем с разделением слов и глобулированием.

Ниже приведены некоторые из наиболее часто используемых операторов:

  • -n VAR - Истина, если длина VAR больше нуля.
  • -z VAR - Истинно, если VAR пуст.
  • STRING1 = STRING2 - Истинно, если STRING1 и STRING2 равны.
  • STRING1 != STRING2 - Истинно, если STRING1 и STRING2 не равны.
  • INTEGER1 -eq INTEGER2 - Истинно, если INTEGER1 и INTEGER2 равны.
  • INTEGER1 -gt INTEGER2 - Истинно, если INTEGER1 больше INTEGER2.
  • INTEGER1 -lt INTEGER2 - Истинно, если INTEGER1 меньше INTEGER2.
  • INTEGER1 -ge INTEGER2 - Истинно, если INTEGER1 равен или больше INTEGER2.
  • INTEGER1 -le INTEGER2 - Истинно, если INTEGER1 равен или меньше INTEGER2.
  • -h FILE - Истинно, если ФАЙЛ существует и является символической ссылкой.
  • -r FILE - Верно, если ФАЙЛ существует и доступен для чтения.
  • -w FILE - Верно, если ФАЙЛ существует и доступен для записи.
  • -x FILE - Верно, если ФАЙЛ существует и является исполняемым.
  • -d FILE - Верно, если ФАЙЛ существует и является каталогом.
  • -e FILE - Верно, если ФАЙЛ существует и является файлом, независимо от типа (узел, каталог, сокет и т.д.).
  • -f FILE - Истинно, если ФАЙЛ существует и является обычным файлом (не каталогом или устройством).
Понравилась статья? Поделиться с друзьями:
Добавить комментарий