/ / BASH: llegó al caso imbricado superior - bash, menu, case

BASH: llegó al caso imbricado superior - bash, menu, case

Es mi primera pregunta, así que espero que quede claro.suficiente Tengo el siguiente problema con un caso dentro de un caso. El primero es un menú que activa una función. Dentro de la función hay otro caso. En caso de que el usuario seleccione NO, debería regresar al primer caso. No he encontrado cómo hacer eso además de lanzar el primer script (que contiene el primer caso:

menu.sh:

source ./functions.sh

#read answer

while read answer;do

case $answer in

1)
function1
;;

2)
function2
;;
3)
# the same, without function
read -p "do you want to continue [y/n] ?" choice

case $choice in
y|Y)
# DO SOME STUFF
menu.sh
;;
n|N )
./menu.sh
;;
*)
echo "invalid input"
./menu.sh
;;
esac

4)
function4
;;

5)
quit
;;
esac
done

functions.sh:

function1() {

read -p "do you want to continue [y/n] ?" choice

case $choice in
y|Y)
# DO SOME STUFF and go back to menu
echo "hello"
menu.sh
;;
n|N )
./menu.sh
;;
*)
echo "invalid input"
./menu.sh
;;
esac


}

Así como se puede ver, cuando se inicia la función,lanzó el segundo caso donde se pregunta al usuario si desea continuar. Si elige no, puede volver al menú. Pero con la forma en que lo estoy haciendo, estoy generando un menu.sh dentro del caso. ¿Cuál es la mejor solución? Gracias de antemano por su ayuda

Respuestas

2 para la respuesta № 1

Como se diseñó su código, no necesita ejecutar nada para volver al menú. Simplemente borre las líneas en las que está generando menu.sh.

Un ejemplo function1 se vería como

function1() {
read -p "do you want to continue [y/n] ?" choice
case $choice in
y|Y)
# DO SOME STUFF and go back to menu
echo "hello"
;;
n|N )

;;
*)
echo "invalid input"
;;
esac
}

Y cambio

while read answer;do

A

while read -p "Enter a number: " answer;do

Hará que sea más fácil entender cómo funcionan las cosas.