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 № 1Au 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.