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