В этом руководстве мы познакомим вас с основами оператора if
Bash и покажем, как использовать его в сценариях оболочки.
Принятие решений — одна из самых фундаментальных концепций компьютерного программирования. Как и в любом другом языке программирования, if..else
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
игнорируется.
В общем, рекомендуется всегда делать отступ в коде и разделять блоки кода пустыми строками. Большинство людей предпочитают использовать отступы с четырьмя или двумя пробелами. Отступы и пустые строки делают ваш код более читабельным и организованным.
Давайте посмотрим на следующий пример скрипта, который проверяет, больше ли заданное число 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
Оператор if..else
Bash принимает следующую форму:
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
Оператор if..elif..else
Bash имеет следующую форму:
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
— Истинно, если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
— Истина, еслиFILE
существует и является исполняемым.-d
FILE
— Истина, еслиFILE
существует и является каталогом.-e
FILE
— Истина, еслиFILE
существует и является файлом, независимо от типа (узел, каталог, сокет и т. д.).-f
FILE
— Истина, еслиFILE
существует и является обычным файлом (не каталогом или устройством).
Выводы
Операторы if
, if..else
и if..elif..else
позволяют вам управлять потоком выполнения сценария Bash, оценивая заданные условия.
Добавить комментарий