Предыдущий урок: 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: Ключи.