#navi(../)
* シェルスクリプト内でコマンドがエラーの場合に即停止する方法 [#qc264cfe]
通常、シェルスクリプト内で使用しているコマンドでエラーが発生した場合、~
次の行のスクリプトが実行されます。~
本資料は、スクリプト内で使用しているコマンドがエラーになった場合、~
即シェルスクリプトが停止する方法を以下に記します。~
尚、使用したシェルはbashになります。
#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)
* コマンドがエラーの場合、停止する方法 [#g90d5369]
シェルスクリプトの最初の行のシェルに以下のように-eオプションを追加します。
#!/bin/bash -e
これで、シェルスクリプト内でコマンドがエラーの場合、スクリプトが停止します。~
注意点としてifやwhileなどの判定にコマンドの戻り値を判定している場合は、~
スクリプトは停止しません。
* 実際にbash -e を試してみる [#f9f93969]
以下、2つのサンプルスクリプトがあります。
:non-opts.sh|-eオプションなし
:e-opts.sh|-eオプションありでbashを起動
** -eオプションなし(non-opts.sh) [#ab47acce]
-サンプルスクリプト
#!/bin/bash
echo "start"
date foo
echo "end"
-サンプルスクリプト実行結果
sakura@hp-mini:~$ chmod +x non-opts.sh
sakura@hp-mini:~$ ./non-opts.sh
start
date: `foo' は無効な日付です
end
dateコマンドの引数エラーによりエラーが出力されていますが、~
endが表示されている通り最後までスクリプトが動作しているのが確認できます。
** -eオプションなし(e-opts.sh) [#kba9a090]
-サンプルスクリプト
#!/bin/bash -e
echo "start"
date foo
echo "end"
-サンプルスクリプト実行結果
sakura@hp-mini:~$ chmod +x e-opts.sh
sakura@hp-mini:~$ ./e-opts.sh
start
date: `foo' は無効な日付です
dateコマンドが引数エラーによりエラー出力されて、本スクリプトが停止しているのが確認できます。~
(endが表示されていない。)
以上、bashを使用してシェルスクリプト内でエラーが発生した場合、~
スクリプトを停止する方法でした。
#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)