Условные выражения Bash
if
Формат оператора if
в Bash следующий:
if [[ some_test ]]
then
<commands>
fi
Вот краткий пример, в котором вам будет предложено ввести свое имя, если вы оставили его пустым:
#!/bin/bash
# Bash if statement example
read -p "What is your name? " name
if [[ -z ${name} ]]
then
echo "Please enter your name!"
fi
if else
С помощью if-else
оператора вы можете указать действие в случае, если условие в if
операторе не соответствует. Мы можем объединить это с условными выражениями из предыдущего раздела следующим образом:
#!/bin/bash
# Bash if statement example
read -p "What is your name? " name
if [[ -z ${name} ]]
then
echo "Please enter your name!"
else
echo "Hi there ${name}"
fi
Вы можете использовать приведенный выше оператор if со всеми условными выражениями из предыдущих глав:
#!/bin/bash
admin="devdojo"
read -p "Enter your username? " username
# Check if the username provided is the admin
if [[ "${username}" == "${admin}" ]] ; then
echo "You are the admin user!"
else
echo "You are NOT the admin user!"
fi
Вот еще один пример оператора if
, который проверит ваш текущий статус User ID
и не позволит вам запустить скрипт от имени root
пользователя:
#!/bin/bash
if (( $EUID == 0 )); then
echo "Please do not run as root"
exit
fi
Если вы поместите это поверх своего сценария, он закроется, если EUID равен 0, и не выполнит остальную часть сценария. Это обсуждалось на форуме сообщества DigitalOcean .
Вы также можете проверить несколько условий с помощью if
оператора. В этом примере мы хотим убедиться, что пользователь не является ни пользователем с правами администратора, ни пользователем root, чтобы гарантировать, что сценарий не сможет нанести слишком большой ущерб. В этом примере мы будем использовать or
оператор, отмеченный ||
. Это означает, что любое из условий должно быть истинным. Если бы мы использовали and
оператор of &&
, то оба условия должны были бы быть истинными.
#!/bin/bash
admin="devdojo"
read -p "Enter your username? " username
# Check if the username provided is the admin
if [[ "${username}" != "${admin}" ]] || [[ $EUID != 0 ]] ; then
echo "You are not the admin or root user, but please be safe!"
else
echo "You are the admin user! This could be very destructive!"
fi
Если у вас есть несколько условий и сценариев, вы можете использовать elif
операторы if
и else
операторы.
#!/bin/bash
read -p "Enter a number: " num
if [[ $num -gt 0 ]] ; then
echo "The number is positive"
elif [[ $num -lt 0 ]] ; then
echo "The number is negative"
else
echo "The number is 0"
fi
switch case
Как и в других языках программирования, вы можете использовать case
оператор для упрощения сложных условий, когда есть несколько разных вариантов. Таким образом, вместо использования нескольких операторов if
и if-else
вы можете использовать один case
оператор.
Синтаксис оператора Bash case
выглядит следующим образом:
case $some_variable in
pattern_1)
commands
;;
pattern_2| pattern_3)
commands
;;
*)
default commands
;;
esac
Краткое изложение конструкции:
Все
case
утверждения начинаются сcase
ключевого слова.В той же строке, что и
case
ключевое слово, вам необходимо указать переменную или выражение, за которым следуетin
ключевое слово.После этого у вас появляются
case
выкройки, по которым нужно)
определить конец выкройки.Вы можете указать несколько шаблонов, разделенных вертикальной чертой:
|
.После шаблона вы указываете команды, которые вы хотите выполнить, если шаблон соответствует указанной вами переменной или выражению.
Все предложения должны быть завершены добавлением
;;
в конце.Вы можете использовать оператор по умолчанию, добавив
*
в качестве шаблона.Чтобы закрыть
case
оператор, используйтеesac
ключевое слово (регистр в обратном порядке).
Вот пример оператора Bash case
:
#!/bin/bash
read -p "Enter the name of your car brand: " car
case $car in
Tesla)
echo -n "${car}'s car factory is in the USA."
;;
BMW | Mercedes | Audi | Porsche)
echo -n "${car}'s car factory is in Germany."
;;
Toyota | Mazda | Mitsubishi | Subaru)
echo -n "${car}'s car factory is in Japan."
;;
*)
echo -n "${car} is an unknown car brand"
;;
esac
С помощью этого скрипта мы просим пользователя ввести название марки автомобиля, например Telsa, BMW, Mercedes и т. д.
Затем с помощью case
заявления мы проверяем название бренда и соответствует ли оно какому-либо из наших шаблонов, и если да, то распечатываем местоположение фабрики.
Если название бренда не соответствует ни одному из наших case
утверждений, мы распечатываем сообщение по умолчанию: an unknown car brand
.
Заключение
Я бы посоветовал вам попробовать изменить сценарий и немного поиграть с ним, чтобы вы могли попрактиковаться в том, что вы только что узнали в последних двух главах!
Дополнительные примеры case
операторов Bash можно найти в главе 16, где мы создадим интерактивное меню в Bash, используя оператор cases
для обработки пользовательского ввода.
Last updated