エラー処理と終了ステータス
終了ステータスを理解し、「set -e」や条件分岐を使って、堅牢なエラーチェックをスクリプトに実装します。
「エラー処理と終了ステータス」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
エラー処理へようこそ
このレッスンでは、エラーを効果的に処理する方法を学び、Bash スクリプトをより堅牢にします。
多くの手順を実行するスクリプトを想像してください。途中の手順が 1 つ失敗したら、スクリプトを停止するか、少なくとも失敗したことを把握したいと思うはずです。そこで必要になるのがエラー処理です。
終了ステータスとは
Linux シェルで実行するすべてのコマンドは、終了ステータス(終了コードやリターンコードと呼ばれることもあります)を返します。
- ステータスが 0 の場合、コマンドは正常に完了しています。
- ゼロ以外のステータス(例: 1、2、127)は、何らかの失敗またはエラーを示します。
コマンドにとっての信号機のようなものです。
終了ステータスを手動で確認する
特殊な変数 $? を使うと、直前に実行したコマンドの終了ステータスを確認できます。
成功するコマンドと失敗するコマンドを試してみましょう。
#!/bin/bash
echo "Hello CoddyKit"
echo "Exit status: $?"
ls non_existent_file.txt
echo "Exit status: $?"基本的な条件付きエラーチェック
終了ステータスがわかると、スクリプトで処理を分岐できるようになります。if 文で $? を確認し、エラーに対応できます。
これにより、スクリプトが問題を認識し、不正なデータを使って処理を続行するのを防げます。
#!/bin/bash
ls non_existent_file.txt
if [ $? -ne 0 ]; then
echo "Error: The 'ls' command failed!"
exit 1 # Exit script with an error code
fi
echo "This line will not run if 'ls' fails."`set -e` の効果
すべてのコマンドの後で $? を手動で確認するのは面倒です。そこで役立つのが set -e です。
スクリプトの先頭で set -e を指定すると、条件判定の一部ではないコマンドがゼロ以外のステータスで終了した場合、Bash は直ちに終了します。
スクリプト全体に適用される安全装置のようなものです。
`set -e` の動作を確認する
set -e によって、エラーの後にスクリプトが処理を続行しなくなることを確認しましょう。最後の echo コマンドが実行されないことに注目してください。
#!/bin/bash
set -e
echo "Starting important tasks..."
# This command will fail
cp /non_existent_source /tmp/destination
echo "This line will NOT be printed if 'cp' fails."
echo "All tasks completed successfully."`set -e` で停止しない場合
set -e は強力ですが、適用には特定のルールがあります。失敗したコマンドが次のいずれかに該当する場合、スクリプトは終了しません。
ifまたはwhileの条件の一部である。&&または||のリストの一部である(最後のコマンドを除く)。!の後に置かれている。
これらのコンテキストは成功や失敗を判定するためのものなので、`set -e` が処理を妨げないようになっています。
`set -e` と `||` を組み合わせる
終了する前に独自のエラーメッセージを表示したい場合があります。set -e と ||(OR)演算子を組み合わせることができます。
command || { echo "Error message"; exit 1; }
command が失敗すると、|| の後の部分が実行され、メッセージを表示してから、指定したエラーコードで終了します。
#!/bin/bash
set -e
echo "Attempting to find a file..."
find /non_existent_dir -name "*.txt" || \
{ echo "ERROR: Could not search in /non_existent_dir!"; exit 1; }
echo "Script continued (this won't print if 'find' fails)."特定の終了コードを処理する
0 は成功、ゼロ以外は失敗を意味しますが、ゼロ以外のコードにはそれぞれ異なる意味がある場合があります。
1: 一般的なエラー。2: シェル組み込みコマンドの使い方が誤っている。127: コマンドが見つからない。
if [ $? -eq 127 ] を使うと、特定の失敗の種類を確認でき、状況に応じたエラーメッセージを提示できます。
エラー処理クイズ
Bash の終了ステータスとエラー処理について、次のうち正しい説明はどれでしょうか。
復習: 堅牢なスクリプト
Bash スクリプトの信頼性を大幅に高める方法を学びました。
- すべてのコマンドは終了ステータスを返します(成功なら 0、失敗ならゼロ以外)。
$?変数から、直前のコマンドの終了ステータスを取得できます。set -eは、ほとんどのコマンド失敗時にスクリプトを自動的に終了させる強力なツールです。set -eと||を組み合わせると、独自のエラーメッセージを表示できます。
これらの手法を使うと、よりプロフェッショナルで安定したスクリプトを作成できます。
よくある質問
「エラー処理と終了ステータス」レッスンは無料ですか?
はい。「エラー処理と終了ステータス」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「エラー処理と終了ステータス」で何を学びますか?
終了ステータスを理解し、「set -e」や条件分岐を使って、堅牢なエラーチェックをスクリプトに実装します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「エラー処理と終了ステータス」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。