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 можно, например, написать простое консольное меню