私はいくつかの練習問題をやっています。
引数として月番号を指定し、この番号を月名に変換するスクリプトを作成します。結果は標準出力に出力されます。
私は解決策を作りました:
#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
exit 1, exit 0
とexit 2
はどういう意味ですか、なぜそれらを使用するのですか?
これが良い例です シェル終了コードのリファレンス :
Exit code 0 Success
Exit code 1 General errors, Miscellaneous errors, such as "divide by zero" and other impermissible operations
Exit code 2 Misuse of Shell builtins (according to Bash documentation) Example: empty_function() {}
警告:適切な終了コードを使用することは必須ではなく、シェルによって強制されません。開発者は、賢明だと思う場合、ガイダンスを無視できます。
exit
と数字を使用することは、スクリプトの結果を知らせる便利な方法です。これは、bashコマンドが戻りコードを出力する方法を模倣しています。 bashコマンドでは、戻りコード0は通常、すべてがエラーなしで正常に実行されたことを意味します。 exit
は、その時点でスクリプトの実行を停止し、コマンドラインに戻ります。
0より大きいリターンコードは何らかのエラーを示しますが、エラーは重大ではない場合もありますが、各コマンドについて、各リターンコードの意味を説明するドキュメントを見つけることができるはずです。
シェル変数$?
を使用して、最後のbashコマンドのリターンコードを取得できます。
$ echo "something"
something
$ echo $?
0
$ cp
cp: missing file operand
Try 'cp --help' for more information.
$ echo $?
1
スクリプトでこれを使用すると、実行の完了時に同じ方法でリターンコードをクエリできます。したがって、次のことがわかります。
exit 2
exit 0
exit 0
部分に到達することは決してできないため、無意味です。
単独で、exit
は終了値ゼロ、またはスクリプトの正常終了を意味します。正常に完了したことを示すために、終了コマンドにゼロ引数を追加する必要はありません。スクリプトは、エラー状態をテストしますが、正常に終了する可能性があります(またはおそらく終了します)。この場合、特にエラー(または1)状態で終了するようにしたいでしょう。
echo -e "Enter numbers 1-4" \c"
read NUM
case $NUM in
1) echo "one";;
2) echo "two";;
3) echo "three";;
4) echo "four";;
*) echo "invalid answer"
exit 1;;
esac
最後の行のexit
コマンドは、必ずしもそこにある必要はありません。ゼロで呼び出すことも、まったく呼び出さないこともできます。 exitコマンドに1引数を指定しないと、これらすべての場合のecho $?
に対する答えはゼロになります。
ただし、exitコマンドに1引数を指定すると、echo $?
への応答は1になります。したがって、スクリプトがエラー状態で終了したことを指定する場合は、exitコマンドに1引数を使用します。