Ich versuche zu testen, ob ein Skript korrekt endet oder nicht. Ich bitte den Benutzer, ja/nein einzugeben. Wenn die Antwort ja ist, wird das Skript etwas tun, wenn die Antwort nein ist, zeigt das Skript eine Fehlermeldung an. Und schließlich, wenn die Antwort etwas anderes ist, zeigt das Skript eine andere Fehlermeldung an. Wenn ich mit "Ja" antworte, muss das Skript korrekt enden. (Exit code 0) Wenn ich mit Nein antworte, muss das Skript falsch enden. (Exit Code 1) Wenn ich etwas anderes antworte, muss das Skript falsch enden. (Exit-Code 1). Mein Problem ist, wenn ich einen Beendigungscode 1 provoziere, zeigt das Skript keine Fehlermeldung an. Nachdem das Skript beendet ist, führe ich $? und ich sehe der Exit-Code 1 ist, so dass die if-else gut funktioniert, scheint aber die Funktion nichtWarum funktioniert mein Shell-Skript nicht richtig?
#!/bin/bash
function testingexit(){
if [ "$?" = "0" ]
then
echo "test ok"
else
echo "test error"
fi
}
read -p "(yes/no): " answer
if [ "$answer" = "yes" ] || [ "$answer" = "YES" ]
then
echo "hello"
elif [ "$answer" = "no" ] || [ "$answer" = "NO" ]
then
echo "error1"
exit 1
else
echo "error2"
exit 1
fi
#!/bin/bash
clear
function menu()
{
echo "¿Hi what do you want to do?:"
echo
echo "1) opt1"
echo "2) opt2"
echo "2) opt3"
echo "9) Exit"
echo
echo -n "Choose an option: "
}
# the function use 'return' instead of 'exit'
function get_user_input {
read -p "Do you want to start the program?: " answer if [[ "$answer" =~ ^yes|YES$ ]]
then
return 0
elif [[ "$answer" =~ ^no|NO$ ]]
then
return 1
else
return 2
fi
}
# invoke
get_user_input
func_return=$?
function testingexit() {
if [ $func_return = "0" ]
then
echo "test ok"
else
echo "test error"
fi
}
# default option
opt="0"
# loop 9 to exit
until [ "$opt" -eq "9" ];
do
case $opt in
1)
echo "opt1"
menu
;;
2)
echo "opt2"
menu
;;
3)
echo "opt3"
menu
;;
*)
menu
;;
esac
read opt
done
testingexit
exit $func_return
Jetzt arbeitet Ich möchte dieses Menü verwenden, wenn Ich antworte ja. Wenn ich nein antworte, sollte das Menü nicht angezeigt werden und das Skript muss die Meldung "Testfehler" anzeigen.
Ich kann Ihr Problem nicht duplizieren. Außerdem definieren Sie 'testingexit', nennen es aber nicht. –
Ja, ich habe das Skript nicht gut eingefügt, mein Fehler. Am Ende des Skripts habe ich die Funktion aufgerufen. –