Принятие решений — одна из самых фундаментальных концепций компьютерного программирования. Как и в любом другом языке программирования, if
, if..else
, if..elif..else
и вложенные if
операторы в Bash используются для выполнения кода на основе определенного условия
if
Условные операторы Bash if
могут иметь различные формы. Самый простой 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, потому что 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.
Несколько условий
Логические операторы 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/