Uma coisa que você pode fazer (quando ficar um pouco mais avançado porque envolve laços de repetição e manipulação de arrays) é transformar a função menu em uma “geradora” de menus padronizada, por exemplo:
function menu() {
ESCOLHA=""
clear
contador=1
echo "------------------------------------"
echo " $1"
shift
ITEMS=${@}
echo -e "------------------------------------\n"
for i in "${@}"; do
echo " [ $contador ] $i"
contador=$(($contador+1))
done
echo -e "\n------------------------------------\n"
echo " Pressione a tecla com o número"
echo -e " que corresponde a sua escolha:\n"
read -s -n1 ESCOLHA
[[ "$ESCOLHA" =~ ^[0-9]+$ ]] || ESCOLHA=0
[ "$ESCOLHA" -ge 1 -a "$ESCOLHA" -le $contador ] || ESCOLHA=0
}
Assim você pode chamar os menus assim:
menu "Escolha um prato" "Arroz com frango" "Lasanha" "Pizza"
[ "$ESCOLHA" = "0" ] && echo "Resposta inválida"
[ "$ESCOLHA" = "1" ] && echo "Arroz com frango é muito bom"
[ "$ESCOLHA" = "2" ] && echo "Lasanha é uma boa pedida"
[ "$ESCOLHA" = "3" ] && echo "Não gosto de Pizza"
read -n1 -s -p "Pressione uma tecla para continuar..."
# Por causa do comando "clear"
# E novamente:
menu "Escolha um animal" "Gato" "Cachorro" "Papagaio"
[ "$ESCOLHA" = "0" ] && echo "Resposta inválida"
[ "$ESCOLHA" = "1" ] && echo "Gatos são animais selvagens"
[ "$ESCOLHA" = "2" ] && echo "Cachorros são parentes dos lobos"
[ "$ESCOLHA" = "3" ] && echo "Papagaios são aves"
A saída fica assim no caso da primeira chamada:
------------------------------------
Escolha um prato
------------------------------------
[ 1 ] Arroz com frango
[ 2 ] Lasanha
[ 3 ] Pizza
------------------------------------
Pressione a tecla com o número
que corresponde a sua escolha: