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

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