Условные выражения 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!"
fiif 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"
fiswitch 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