/ / BASH: dotarłem do górnej obudowy z imbrated - bash, menu, case

BASH: dotarłem do górnej obudowy z imbrated - bash, menu, case

To jest moje pierwsze pytanie, więc mam nadzieję, że jestem jasnydość Mam następujący problem ze skrzynką w walizce. pierwszy to menu, które uruchamia funkcję. wewnątrz funkcji znajduje się inny przypadek. W przypadku, gdy użytkownik wybierze NIE, powinien wrócić do pierwszej sprawy. Nie znalazłem sposobu, aby to zrobić poza uruchomieniem pierwszego skryptu (zawierającego pierwszy przypadek:

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


}

tak jak widzisz, kiedy funkcja jest uruchomiona,uruchomił drugi przypadek, w którym użytkownik jest pytany, czy chce kontynuować. Jeśli wybierze nie, może wrócić do menu. Ale ze sposobem, w jaki to robię, pojawia się menu.sh wewnątrz sprawy. Jakie jest lepsze rozwiązanie? Z góry dziękuję za pomoc

Odpowiedzi:

2 dla odpowiedzi № 1

Gdy twój kod się ułoży, nie musisz uruchamiać niczego, aby wrócić do menu. Po prostu usuń wiersze, w których tworzysz menu.sh.

Przykład function1 wyglądałby jak:

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
}

I zmień

while read answer;do

Do

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

Ułatwi to zrozumienie działania.