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