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.


bash меню



Утилита устанавливается из репозитория дистрибутива если её нет в системе. При использовании Debian или Ubuntu:


apt install figlet

Затем y чтобы подтвердить согласие на установку




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.

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