bash меню, написание скрипта меню

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.

bash меню

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.

Запись опубликована автором в рубрике Bash.