Categories: shellscript

シェルスクリプトでエラー処理を行うset -eコマンドとは? 使い方を解説

シェルスクリプトで記述したスクリプトの信頼性を保つためには、エラー処理が非常に重要です。

シェルスクリプトでエラーを適切に処理するための一つの手法が「set -e」コマンドです。

この記事では、「set -e」の機能とその使用方法について詳しく説明します。

「set -e」とは?

set -eコマンドは、シェルスクリプト内でコマンドが失敗した場合に、スクリプトの実行を直ちに停止させるためのオプションです。

シェルスクリプトのデフォルトの動作では、あるコマンドが失敗してもスクリプトの実行は続行されることがありますが、set -eを設定することで、失敗した時点でスクリプトが停止します。

具体的には、set -eを有効にすると、以下の事項が発生した場合にスクリプトが停止します。

  1. コマンドの終了ステータスが0以外(失敗)である場合。
  2. if 文やwhileループの条件が失敗する場合

set -eの使い方とサンプルスクリプト

「set -e」をシェルスクリプトに追加するのは非常に簡単です。スクリプトの最初に「set -e」を書くだけで、そのスクリプト全体に適用されます。以下にその例を示します。

#!/bin/bash
set -e

echo "スクリプトの開始"

# 存在しないディレクトリに移動しようとする
cd /nonexistent_directory

# この行は実行されない
echo "このメッセージは表示されません"

このスクリプトでは、cd /nonexistent_directory が失敗するため、set -e によってスクリプトの実行が停止し、次の echoコマンドは実行されません。

コマンドが失敗してもスクリプトを続行したい場合

set -eを使用する際に、特定のコマンドが失敗してもスクリプトの実行を続行したい場合があります。このような場合には、コマンドの直後に”|| true”を追加することで、エラーを無視して続行させることができます。

以下のスクリプトでは、cd /nonexistent_directoryが失敗しても || true によってスクリプトの実行が続行されます。

#!/bin/bash
set -e

echo "スクリプトの開始"

# 存在しないディレクトリに移動しようとする
cd /nonexistent_directory || true

# この行は実行されない
echo "このメッセージは表示されます"

set -e を使用する利点

  • エラーの早期検出: コマンドが失敗すると直ちにスクリプトが停止するため、エラーを早期に検出し、問題の修正が容易になります。
  • 安定性の向上: エラーが発生した際にスクリプトが自動的に停止することで、後続の処理が不正確なデータや状態で実行されるのを防げます。

まとめ

set -eコマンドは、シェルスクリプトのエラー処理を強化し、スクリプトの信頼性を高める強力なツールです。エラーが発生した際にスクリプトを自動的に停止させることで、問題の早期発見と修正が可能になります。

set -eをうまく活用して、より堅牢なスクリプトを作成してください。

Haruoka