【Linux】コマンドが失敗したら強制終了するシェルスクリプトの書き方

目次

コマンドが失敗したら強制終了するスクリプト

方法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

わざとpwdpdwとタイポしてみます


#!/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
よかったらシェアしてね!
目次