exitコマンドでBashスクリプトを終了する方法|実例と終了ステータスの解説
Bashやシェルスクリプトは、通常、ファイル内のコードがすべて実行されるまで順番に処理されていきます。しかし、exitコマンドを使えば、任意の条件に応じてスクリプトの途中で処理を終了させることができます。
exitコマンドの構文
Bash/シェルスクリプトで使用できるexitコマンドの基本構文は以下の通りです。
exit STATUS
各要素の意味は次の通りです。
- STATUSは省略可能なパラメータで、スクリプトの「終了ステータス(exit status)」を設定します。
- 終了ステータスは、スクリプトが正常に実行されたかどうかを、呼び出し元の他のプログラムに伝えるための値です。
- STATUSを省略した場合、0または「スクリプト内で最後に実行されたコマンドの終了ステータス」が自動的に使用されます。
- 終了ステータスが0の場合は成功を意味し、1以上の値は失敗を意味します。
Bashスクリプトの実例
以下はexitコマンドを使用したサンプルスクリプトです。各行がどのように動作するのか、コメントで詳しく解説しています。
#!/bin/bash
# エラー発生時にTRUEを設定できるテスト用変数
ERROR=false
# この行はどのexitコマンドよりも前にあるため、必ず出力される
echo "Hello LinuxScrew!"
# エラーが発生している場合...
if $ERROR ; then
# ユーザーにエラーを通知
echo "There was an error"
# 終了ステータス1(失敗)でプログラムを終了
exit 1
fi
# 終了ステータス0(成功)でスクリプトを終了
exit 0
# この行はexitコマンドより後にあるため実行されず、決して出力されない
echo "This is a pointless line"
シェルスクリプト先頭の「#!」とは?
1行目の「#!/bin/bash」は「シバン(shebang)」と呼ばれる記述で、このスクリプトをどのインタプリタ(Bashなど)で実行するかをシステムに指示する役割を持っています。
ご覧のとおり、exitはスクリプトを終了させるだけの非常にシンプルなコマンドです。ただし、終了時に渡すステータスを後から確認することで、スクリプトが成功したのか失敗したのかを判定できます。
プログラムやスクリプトの終了ステータスを確認する方法
直前に実行したコマンドの終了ステータスは、シェル上で次のコマンドを実行すると確認できます。
echo $?
特殊変数$?には、直前のコマンドの終了ステータスが格納されています。0が返れば成功、0以外が返れば何らかの失敗が発生したことを示します。この仕組みを利用すれば、あるスクリプトの結果を受けて、別のスクリプトの動作を分岐させることも可能です。
スクリプトの出力との違いは?
スクリプトの出力は、終了ステータスとはまったく別のものです。echoなどのコマンドによる出力は、すべてSTDOUT(標準出力)としてアプリケーションから出力されます。標準出力はリダイレクトによって別の場所へ送ったり、画面に表示したり、ファイルに保存したりすることができます。一方、終了ステータスはあくまで「成功か失敗か」という結果のみを伝える数値であり、両者は目的が異なる点に注意しましょう。
-
Linuxのwatchコマンドの使い方と実用例をわかりやすく解説
Linuxのwatchコマンドは、指定したコマンドを一定間隔で繰り返し実行し、その結果を画面に表示し続けるためのツールです。コマンドの出力が時間とともにどう変化するかをリアルタイムで監視したい場合に非常に便利です。この記事では、watchコマンドの基本的な使い方と、覚えておくと役立つ実用的な例を紹介します。 watchコマンドの基本構文 watchコマンドの構文は以下のとおりです。 watch オプション コマンド 各要素の意味は次のとおりです。 オプション: 後述の表から選択したオプションを指定します。watchコマンドのデフォルト動作を変更できます。 コマンド: watchが繰り返し実行
-
実用的な5つの例で学ぶBashスクリプト入門チュートリアル
Unix SedやUnix Awkシリーズと同様に、本シリーズではBashスクリプティングに関する記事を複数回にわたって公開します。実用的なサンプルを交えながら、Bashスクリプティングのテクニックを幅広く解説していきます。 シェルとは、ユーザーが入力したコマンドを解釈して実行するプログラムです。コマンドはユーザーが直接入力するか、「シェルスクリプト」と呼ばれるファイルから読み込まれます。 ユーザーからの入力を直接読み取る場合、そのシェルは対話型(インタラクティブ)シェルと呼ばれます。 一方、ファイルからコマンドを読み込んで実行する場合は非対話型(ノンインタラクティブ)シェルと呼ばれます。この