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

Bash скрипты используются для решения административных задач, на bash пишутся не только однострочники, но и довольно сложные скрипты в которых назначаются и вызываются функции, часто использование функций оказывается полезным совмещать с операторами 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

Объяснение принципов работы скрипта с 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 секунду и повторный запуск основной программы с начала.

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