/ / BASH: arrivé au casier supérieur imbriqué - bash, menu, case

BASH: arrivé au cas imbriqué supérieur - bash, menu, cas

C'est ma première question, donc j'espère que je suis clairsuffisant J'ai le problème suivant avec un boîtier à l'intérieur d'un boîtier. le premier est un menu qui déclenche une fonction. à l'intérieur de la fonction, il y a un autre cas. Si l'utilisateur sélectionne NON, il doit revenir au premier cas. Je n'ai pas trouvé comment faire à côté du lancement du premier script (contenant le premier cas:

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


}

comme vous pouvez le voir, lorsque la fonction est lancée,il a lancé le deuxième cas où l'on demande à l'utilisateur s'il veut continuer. S'il choisit non, il peut revenir au menu. Mais avec la façon dont je le fais, je crée un menu.sh à l'intérieur du boîtier. Quelle est la meilleure solution? Merci d'avance pour votre aide

Réponses:

2 pour la réponse № 1

Au fur et à mesure que votre code est présenté, vous n'avez pas besoin d'exécuter quoi que ce soit pour revenir au menu. Supprimez simplement les lignes dans lesquelles vous générez le menu.sh.

Un exemple function1 ressemblerait à ceci:

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
}

Et changer

while read answer;do

À

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

Cela facilitera la compréhension du fonctionnement des choses.