Bash — операторы if..elif..else

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

if

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

if TEST-COMMAND
then
  STATEMENTS
fi

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

Если TEST-COMMAND оценивается как TrueSTATEMENTS выполняется. Если 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, потому что 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 оценивается как TrueSTATEMENTS1 будет выполнено. В противном случае, если TEST-COMMAND возвращается FalseSTATEMENTS2 будет выполнено 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 оценивается как TrueSTATEMENTS1 будет выполнено. Если TEST-COMMAND2 оценивается как TrueSTATEMENTS2 будет выполнено. Если ни одна из тестовых команд не оценивается как TrueSTATEMENTS2 выполняется 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.

Несколько условий

Логические операторы 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

Оригинал статьи https://linuxize.com/post/bash-if-else-statement/

Наверх