目次
コマンドが失敗したら強制終了するスクリプト
方法1
||
演算子で用いて,失敗したら強制終了します.
#!/bin/bash
exec_command || exit 1
方法2
方法1からさらに,コマンドが失敗した場合,メッセージを出力し強制終了するようにします.
直前のコマンド実行結果は$?
で確認可能なので,下記のような条件分岐を加えます.
#!/bin/bash
exec_command
if [ $? != 0 ]; then
echo "Command is failed"
exit 1
fi
方法3
上記のコマンドでも十分ですが,もう少し使い勝手を良くします
上記の方法の課題(問題点)は,それぞれ以下の通りです.
- 方法1:失敗したら強制終了できるが,コマンドが複数あった場合どのコマンドが失敗したかわからない
- 方法2:コマンドごとに条件を書かなければならないため面倒
trap
のERRシグナルを利用することで,もう少しわかりやすく,どのコマンドでエラーが発生したかを出力します.
#!/bin/bash
function exit_trap() {
if [ $? != 0 ]; then
echo "Command [$BASH_COMMAND] is failed"
exit 1
fi
}
trap exit_trap ERR
exec_command
使い方
方法3の使い方を示します.
ファイル名は,script.sh
とし,例題を示します.
#!/bin/bash
function exit_trap() {
if [ $? != 0 ]; then
echo "Command [$BASH_COMMAND] is failed"
exit 1
fi
}
trap exit_trap ERR
pwd
bash script.sh
/home/user
わざとpwd
をpdw
とタイポしてみます
#!/bin/bash
function exit_trap() {
if [ $? != 0 ]; then
echo "Command [$BASH_COMMAND] is failed"
exit 1
fi
}
trap exit_trap ERR
pdw
bash script.sh
script.sh: line 9: pdw: command not found
Command [pdw] is failed