Robię ćwiczenia.
Napisz skrypt, który otrzyma argument miesiąca jako argument i przetłumaczy ten numer na nazwę miesiąca. Wynik zostanie wydrukowany na standardowym wyjściu.
Stworzyłem rozwiązanie:
#test for number of argument
if [ "$#" -eq 0 ] ;
then
echo -e "No argument."
echo -e "Write a number between 1 and 12."
exit 1
elif [ "$#" -gt 1 ] ;
then
echo -e "More than 1 argument."
echo -e "Write a number between 1 and 12."
exit 1
else
numb=$1
case "$numb" in
1) echo "Month: January";;
2) echo "Month: February";;
3) echo "Month: March";;
4) echo "Month: April";;
5) echo "Month: May";;
6) echo "Month: June";;
7) echo "Month: July";;
8) echo "Month: August";;
9) echo "Month: September";;
10) echo "Month: October";;
11) echo "Month: November";;
12) echo "Month: December";;
*) echo -e "You wrote a wrong number. Try again with writing number between 1 and 12.";;
esac
fi
exit 2
exit 0
Co exit 1, exit 0
i co exit 2
oznacza i dlaczego ich używamy?
Odpowiedzi:
Oto jedno dobre odniesienie do kodów wyjścia powłoki :
Zastrzeżenie: użycie właściwego kodu wyjścia nie jest wymagane i nie jest egzekwowane przez powłokę. Programiści mogą zignorować wskazówki, jeśli uznają to za mądre.
źródło
Używanie
exit
i liczba to przydatny sposób sygnalizowania wyniku skryptu. Naśladuje sposób, w jaki polecenia bash generują kod powrotu. W przypadku poleceń bash kod powrotu 0 zwykle oznacza, że wszystko przebiegło pomyślnie bez błędów.exit
powoduje również zatrzymanie wykonywania skryptu w tym momencie i powrót do wiersza poleceń.Każdy kod powrotu większy niż 0 wskazuje na jakiś rodzaj błędu, chociaż czasami błąd nie jest krytyczny, dla każdego polecenia powinna istnieć możliwość znalezienia dokumentacji wyjaśniającej, co oznacza każdy kod powrotu.
Możesz uzyskać kod powrotu ostatniej komendy bash, używając zmiennej powłoki w następujący
$?
sposób:Gdy używasz tego w skrypcie, możesz zapytać o kod powrotu w ten sam sposób, gdy zakończy się wykonywanie. Przekonasz się więc, że:
Jest to trochę bez znaczenia, ponieważ nigdy nie możesz dotrzeć do tej
exit 0
części.źródło
Wszystko samo w sobie
exit
oznacza wartość wyjściową równą zero lub pomyślne zakończenie skryptu. Nie musisz dodawać argumentu zero do polecenia exit, aby wskazać pomyślne zakończenie. Skrypt może (lub prawdopodobnie zakończy) pomyślnie zakończyć działanie, chociaż testuje pod kątem błędnych warunków. W takim przypadku chcesz, aby zakończyło się z warunkiem błędu (lub 1).exit
Komenda w ostatnim wierszu nie musi być tam w ogóle. Można go wywołać z zerowym lub w ogóle nie wywołać. Bez podania argumentu 1 dla polecenia wyjścia odpowiedź we wszystkich tych przypadkachecho $?
będzie równa zero.Jeśli jednak podasz argument 1 dla polecenia wyjścia, odpowiedź
echo $?
będzie równa 1. Użyj więc argumentu 1 dla polecenia wyjścia, jeśli chcesz określić, że skrypt zakończył działanie z warunkiem błędu.źródło