bash — язык, на котором реализуются большинство скриптов, необходимые в системном администрировании. Также на bash можно создавать скрипты, которые будут требовать участия пользователя — выводить вопросы и считывать ответы выполняя на основании этих ответов те или иные действия.
В рамках статьи будет рассмотрено написание на скрипта простого меню с двумя возможными опциями, выбор между которыми предоставляется пользователю.
Написание скрипта простого консольного Bash меню
Код рабочего скрипта представлен ниже, после блока кода приведено описание работы
#!/bin/bash
x=0
while [ $x = 0 ]
do
clear
echo «Do u like to code (Y/N). Hit q to quit»
read answer
case «$answer» in
Y)
echo «It's great, of course u love it, especially in bash»
x=1
;;
N)
echo «U said NO. It's definetly is not true…Think it over again»
x=1
;;
q)
echo «Can't decide now. Let it go for now… Exiting in 5 seconds…»
sleep 3
let x=5;while [ $x -gt 0 ];do clear;figlet $x;let x-=1;sleep 1;done
echo «This is the end»
x=1
;;
*)
clear
echo «Not an option»
sleep 3
esac
done
Bash меню проучилось интерактивным, программа выполняется тем или иным образом в зависимости от вводимой пользователем информации.
Скрипт начинается с указания командного интерпретатора
#!/bin/bash
Определяем значение переменной и начинаем цикл while, выход из цикла будет происходить в случае если значение переменной будет отлично от нуля.
x=0
while [ $x = 0 ]
Пока x = 0 выводим при помощи echo строку «Do u like to code (Y/N). Hit q to quit»
Далее даем команду на считывание ответа и используя оператор case выводим различные результаты при разных ответах (предварительно очищаем экран clear)
do
clear
read answer
Если ответ Y — выводим «It's great, of course u love it, especially in bash»
case «$answer» in
Y)
echo «It's great, of course I love it, especially in bash»
x=1
;;
Приравниваем x=1 и выходим из цикла, ;; означает окончание каждого из возможных вариантов в case
Тем же образом выводим заданное предложение в случае ответа N
N)
echo «U said NO. It's definetly is not true…Think it over again»
x=1
;;
При нажатии на q будет осуществляться выходи из программы с выводом «This is the end», которому будет предшествовать отсчет от 5 до 0 с интервалом в 1 секунду. Цифры при обратном отсчете выводятся посредством утилиты figlet.
q)
echo «Can't decide now. Let it go for now… Exiting in 5 seconds…»
sleep 3
let x=5;while [ $x -gt 0 ];do clear;figlet $x;let x-=1;sleep 1;done
echo «This is the end»
x=1
;;
При нажатии любой другой клавиши в момент считывания ответа будет выоплняться условие определяемое при помощи *). Выводим «Not an option» и через 3 секунды задаем вопрос снова.
*)
clear
echo «Not an option»
sleep 3
Оператор case завершается вводом esac. За счет done завершается do
esac
done
Посмотрите другой пример использования оператора case в bash.