bash скрипты для начинающих — урок №12: Оператор case.

Предыдущий урок: bash скрипты для начинающих — урок №11: Как передать аргументы скрипту.

Мы уже знаем несколько способов варьировать условия и ход выполнения скрипта. Сегодня мы рассмотрим еще один — оператор case. case имеет широкое применение в скриптах, особенно в части получения инструкций от пользователя.

Зачем нужен case?

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

Понятный синтаксис для множественных условий: case делает код более структурированным и легче воспринимаемым, особенно при работе с фиксированным набором допустимых значений.

Обработка командных опций или пользователтких вводов: Например, обработка командных флагов или вариантов выбора.

Упрощение сложных условий: В случае множества вариантов, case — более компактное и читаемое решение, чем комбинация if.

Оператор case

Создадим новый файл скрипта и сделаем его исполняемым:

[root@waky bash_practice]# touch script_12.sh
[root@waky bash_practice]# chmod +x script_12.sh
[root@waky bash_practice]#

Шаг 1: Простой case

Запишем в файл script_12.sh следующие строки:

#!/bin/bash

echo "Choose your server location:"
echo "1 - Moscow"
echo "2 - St.Petersburg"
echo "3 - Novosibirsk"
echo "4 - other location"
echo "Your choice:"

read location

case $location in
    1) echo "Your timezone should be Europe/Moscow.";;
    2) echo "St.Petersburg has the same zone as Moscow. Your timezone should be Europe/Moscow.";;
    3) echo "Your timezone should be Asia/Novosibirsk.";;
    4) echo "You should find your timezone manually.";;
    *) echo "Your choice is out of the scope."
esac 

Запустим скрипт и посмотрим, как это работает:

[root@waky bash_practice]# ./script_12.sh
Choose your server location:
1 - Moscow
2 - St.Petersburg
3 - Novosibirsk
4 - other location
Your choice:
1
Your timezone should be Europe/Moscow.
[root@waky bash_practice]#

Если зададим любое значение вне установленного диапазона:

[root@waky bash_practice]# ./script_12.sh
Choose your server location:
1 - Moscow
2 - St.Petersburg
3 - Novosibirsk
4 - other location
Your choice:
7
Your choice is out of the scope.
[root@waky bash_practice]#

Тоже успешно обработано.

Шаг 2: Добиваемся корректного ввода

Если нам нужно добиться от пользователя выбора из представленных вариантов, и мы не хотим останавливаться на неправильном вводе, мы можем зациклить меню выбора, пока не получим приемлемый ответ.

Добавим в наш скрипт условие while, его мы изучили в уроке №6. После модификации скрипт примет вид:

#!/bin/bash

while [ ! $correct_choice ]
do
    echo "Choose your server location:"
    echo "1 - Moscow"
    echo "2 - St.Petersburg"
    echo "3 - Novosibirsk"
    echo "4 - other location"
    echo "Your choice:"

    read location

    case $location in
        1) echo "Your timezone should be Europe/Moscow."
           correct_choice=1;;
        2) echo "St.Petersburg has the same zone as Moscow. Your timezone should be Europe/Moscow."
           correct_choice=1;;
        3) echo "Your timezone should be Asia/Novosibirsk."
           correct_choice=1;;
        4) echo "You should find your timezone manually."
           correct_choice=1;;
        *) echo "Your choice is out of the scope. Try again."
    esac
done

Мы задали обратное (!) условие, зависящее от переменной ($correct_choice). Пока данная переменная не задана, цикл будет повторяться. Если выбрать любой из установленных пунктов меню, кроме текстового вывода, будет еще задано значение переменной. После чего, условие цикла станет ложным, и цикл завершится.

Запустим скрипт и проверим, так ли это:

[root@waky bash_practice]# ./script_12.sh
Choose your server location:
1 - Moscow
2 - St.Petersburg
3 - Novosibirsk
4 - other location
Your choice:
6
Your choice is out of the scope. Try again.
Choose your server location:
1 - Moscow
2 - St.Petersburg
3 - Novosibirsk
4 - other location
Your choice:
7
Your choice is out of the scope. Try again.
Choose your server location:
1 - Moscow
2 - St.Petersburg
3 - Novosibirsk
4 - other location
Your choice:
4
You should find your timezone manually.
[root@waky bash_practice]#

Верно, скрипт запрашивает у пользователя сделать выбор, пока ответ не будет в диапазоне 1-4.

Итоги:

Сегодня мы узнали, что такое case и как его использовать в скриптах. Данная конструкция нужна для удобной обработки множества вариантов входных данных или условий. С его помощью можно делать интерактивные меню и управлять логикой работы скрипта.  

Следующий урок: bash скрипты для начинающих — урок №13: Ключи.