UNIXシェルスクリプトについて質問があります。
あなたがするなら言うexit 1
in inner if
:終了するか、それとも外部if
を実行しますか?以下はダミーの例です。
if [ "$PASSWORD" == "$VALID_PASSWORD" ]; then
if [ "$PASSWORD" -gt 10]; then
echo "password is too large!"
exit 1
fi
echo "You have access!"
exit 1
fi
exit
は通常Shellビルトインなので、理論的には使用しているShellに依存します。ただし、現在のプロセスを終了する以外に動作するシェルを認識していません。 bashのmanページから、
exit [n]
Cause the Shell to exit with a status of n. If n is omitted,
the exit status is that of the last command executed. A trap on
EXIT is executed before the Shell terminates.
したがって、現在のif
句を単に終了するのではなく、シェル全体(または、スクリプトはシェルプロセス内で実行されているため、本質的にはプロセス)を終了します。
Man shから、
exit [exitstatus]
Terminate the Shell process. If exitstatus is given it is used as
the exit status of the Shell; otherwise the exit status of the
preceding command is used.
そして最後に、男kshから、
† exit [ n ]
Causes the Shell to exit with the exit status specified by n.
The value will be the least significant 8 bits of the specified
status. If n is omitted, then the exit status is that of the
last command executed. An end-of-file will also cause the Shell
to exit except for a Shell which has the ignoreeof option (see
set below) turned on.
exit
は、呼び出しプロセスを終了します。ほとんどの場合、ループ、関数、または含まれているスクリプト内から呼び出した場合でも、これはスクリプト全体を終了します。 exit
を「キャッチ」する唯一のシェル構造は、サブシェルを導入するものです(つまり、 forked 子シェルプロセス):
(…)
_。$(…)
(および非推奨の同等物、バッククォート_`…`
_)。コマンドを実行し、その出力を文字列として返します。&
_で分岐したバックグラウンドジョブ;|
_の左側、およびほとんどのシェルの右側(ATT kshとzshは例外)。<(…)
、>(…)
などです。while
またはfor
ループから抜け出すにはbreak
キーワードを使用し、関数から抜け出すにはreturn
キーワードを使用します。
exit
はスクリプトを完全に終了します。
break
は、ループでは1レベル高くなりますが、ifステートメントではそうではありません(私のbash-manpageによると)。