Оператор Bash if…else

Оператор Bash if...else

В этой статье вы познакомитесь с основами оператора bash if...else и поймете, как использовать его в скриптах оболочки.

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

if оператор

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

 if TEST-COMMAND then STATEMENTS fi

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

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

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

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

 #!/bin/bash echo -n "Enter a number: " read VAR if [[ $VAR -gt 10 ]] then echo "The variable is greater than 10." fi

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

 bash test.sh

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

 The variable is greater than 10.

if...else оператор

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

 if TEST-COMMAND then STATEMENTS1 else STATEMENTS2 fi

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

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

 #!/bin/bash echo -n "Enter a number: " read VAR if [[ $VAR -gt 10 ]] then echo "The variable is greater than 10." else echo "The variable is equal or less than 10." fi

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

if...elif...else Оператор

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

 if TEST-COMMAND1 then STATEMENTS1 elif TEST-COMMAND2 then STATEMENTS2 else STATEMENTS3 fi

Если TEST-COMMAND1 даёт результат True , будет выполнена команда STATEMENTS1 . Если TEST-COMMAND2 даёт результат True , будет выполнена команда STATEMENTS2 . Если ни одна из тестовых команд не даёт результат True , будет выполнена команда STATEMENTS2 .

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

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

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

 #!/bin/bash echo -n "Enter a number: " read VAR if [[ $VAR -gt 10 ]] then echo "The variable is greater than 10." elif [[ $VAR -eq 10 ]] then echo "The variable is equal to 10." else echo "The variable is less than 10." fi

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

Bash позволяет вкладывать операторы if if в друга.

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

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

 #!/bin/bash echo -n "Enter the first number: " read VAR1 echo -n "Enter the second number: " read VAR2 echo -n "Enter the third number: " read VAR3 if [[ $VAR1 -ge $VAR2 ]] then if [[ $VAR1 -ge $VAR3 ]] then echo " $VAR1 is the largest number." else echo " $VAR3 is the largest number." fi else if [[ $VAR2 -ge $VAR3 ]] then echo " $VAR2 is the largest number." else echo " $VAR3 is the largest number." fi fi

Вот как будет выглядеть результат:

 Enter the first number: 4 Enter the second number: 7 Enter the third number: 2 7 is the largest number.

Как правило, эффективнее использовать оператор case вместо вложенных операторов if .

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

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

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

 #!/bin/bash echo -n "Enter the first number: " read VAR1 echo -n "Enter the second number: " read VAR2 echo -n "Enter the third number: " read VAR3 if [[ $VAR1 -ge $VAR2 ]] && [[ $VAR1 -ge $VAR3 ]] then echo " $VAR1 is the largest number." elif [[ $VAR2 -ge $VAR1 ]] && [[ $VAR2 -ge $VAR3 ]] then echo " $VAR2 is the largest number." else echo " $VAR3 is the largest number." fi

Тестовые операторы

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

 test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]]

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

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

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

  • -n VAR — Истина, если длина VAR больше нуля.
  • -z VAR — True, если 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 — Истина, если FILE существует и является символической ссылкой.
  • -r FILE — Истина, если FILE существует и доступен для чтения.
  • -w FILE — Истина, если FILE существует и доступен для записи.
  • -x FILE — True, если FILE существует и является исполняемым.
  • -d FILE — Истина, если FILE существует и является каталогом.
  • -e FILE — Истина, если FILE существует и является файлом, независимо от типа (узел, каталог, сокет и т. д.).
  • -f FILE — Истина , если FILE существует и является обычным файлом (не каталогом или устройством).

Заключение

Операторы if , if...else и if...elif...else позволяют контролировать ход выполнения скрипта Bash путем оценки заданных условий.

Если условие оценивается как ложное, будет выполнен код в необязательном предложении else .

Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.

терминал bash

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *