Найти тему
Baks.Dev

Условные операторы if..else командной оболочки Bash

Оглавление

Bash if..else Statement
Bash if..else Statement

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

if

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

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

if TEST-COMMAND
then STATEMENTS
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 принимает следующую форму:

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

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


Вы можете иметь одно или несколько 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 - Правда, если 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 - True, если FILE существует и является каталогом.
  • -e FILE - Истинно, если FILE существует и является файлом, независимо от типа (узел, каталог, сокет и т. Д.).
  • -f FILE - True, если FILE существует и является обычным файлом (не каталогом или устройством).

Вывод

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