Bash case — пример использования оператора в скрипте


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

Часто с операторами case оказывается полезным совмещать использование функций. Рассмотрим пример подобного совмещения.



Скрипт полностью приведен ниже, далее дается разъяснение принципов его работы.

#!/bin/bash

x=0

function debian(){
 clear
 echo "Do u prefer Debian Mint or Ubuntu?"
 read debian
 case "$debian" in
 [Uu]buntu) echo "oh, u like Ubuntu";;
 [Mm]int) echo "good, u like Linux Mint";;
 *) echo "Um? U typed smth that's not right";;
 esac
 x=1
 }

while [ $x = 0 ]
 do

clear
 echo "Do u use Debian or CentOS?"
 read fruit

case "$fruit" in
 [Dd]ebian)
 debian
 x=1
 ;;

[Cc]ent[Oo][sS])
 echo "U use CentOS"
 x=1
 ;;
 *)

echo "That is not an option"
 sleep 1
 clear
 echo "Please type either Debian or CentOS"
 sleep 1
 ;;
 esac

done



bash case — объяснение принципов работы скрипта и функцией


Первой строкой указывается имя интерпретатора команд

#!/bin/bash

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

x=0

Создаем функцию debian, выводящую вопрос «Do u prefer Debian Mint or Ubuntu?» и считывающую ответ пользователя.

function debian(){
clear
echo "Do u prefer Debian Mint or Ubuntu?"
read debian


Используя case задаем две опции:

case "$debian" in
[Uu]buntu) echo "oh, u like Ubuntu";;


Если ответ Ubuntu (с учетом регистра в первом символе) выводим «oh, u like Ubuntu»

 [Mm]int) echo "good, u like Linux Mint";;


В случае если пользователь выбрал Mint выводим  «good, u like Linux Mint»

*) echo "Um? U typed smth that's not right";;


Если совпадения не найдено — «Um? U typed smth that's not right»

esac
 x=1
 }

Завершаем case с esac и интерируем значение x чтобы выйти из цикла.

Функция сейчас только задана, вызываться она будет на втором этапе выполнения программы.



Начало собственно программы (так как его увидит пользователь).

while [ $x = 0 ]

do


Очищаем экран и задаем главный вопрос «Do u use Debian or CentOS?»

clear
 echo "Do u use Debian or CentOS?"
 read systems



Считываем ответ пользователя при помощи read и реагируем на совпадения

case "$systems" in
 [Dd]ebian)
 debian
 x=1
 ;;


При указании на Debian в любом регистре (первый символ) вызываем заданную ранее функцию debian, которая задаст уточняющий вопрос о любимом дистрибутиве основанном на debian



В случае выбора CentOS просто выводим фразу «U use CentOS».


[Cc]ent[Oo][sS])
 echo "U use CentOS"
 x=1
 ;;



Регистр здесь учитываем как для первого знака, так и для последних двух

*)
echo "That is not an option"
 sleep 1
 clear
 echo "Please type either Debian or CentOS"
 sleep 1
 ;;
 esac

done


Для любого другого ввода пользователя будет действовать правило заданное с *). Ответ системы будет «That is not an option», затем пауза продолжительностью 1 секунду и повторный запуск основной программы с начала.


Вывод скрипта на последнем вопросе:

bash case



Используя case можно, например, написать простое консольное меню

Сказать спасибо