
多くの場合、Bashスクリプトを作成するときは、特定の条件が満たされたときにスクリプトを終了するか、コマンドの終了コードに基づいてアクションを実行する必要があります。
この記事では、Bashの exit
について説明します。 組み込みコマンドと実行されたコマンドの終了ステータス。
各シェルコマンドは、正常または失敗のいずれかで終了すると、終了コードを返します。
慣例により、終了コードがゼロの場合はコマンドが正常に完了したことを示し、ゼロ以外の場合はエラーが発生したことを示します。
特別な変数$?
最後に実行されたコマンドの終了ステータスを返します:
date &> /dev/null
echo $?
日付コード> コマンドは正常に完了し、終了コードはゼロです:
0
ls
を実行しようとした場合 存在しないディレクトリでは、終了コードはゼロ以外になります:
ls /nonexisting_dir &> /dev/null
echo $?
2
ステータスコードを使用して、コマンドが失敗した理由を確認できます。各コマンドのマニュアルページには、終了コードに関する情報が含まれています。
マルチコマンドパイプラインを実行する場合、パイプラインの終了ステータスは最後のコマンドの終了ステータスになります。
sudo tcpdump -n -l | tee file.out
echo $?
上記の例では、 echo $?
tee
の終了コードを出力します コマンド。
exit
コマンド#
exit
コマンドは、ステータスが N
でシェルを終了します 。構文は次のとおりです。
exit N
N
の場合 が指定されていない場合、終了ステータスコードは最後に実行されたコマンドのコードです。
シェルスクリプトで使用する場合、 exit
への引数として提供される値 コマンドは終了コードとしてシェルに返されます。
コマンドの終了ステータスは、 if
などの条件付きコマンドで使用できます。 。次の例では、 grep
「search-string」がfilename
で見つかった場合、ゼロで終了します(これは、シェルスクリプトではtrueを意味します)。 :
if grep -q "search-string" filename then
echo "String found."
else
echo "String not found."
fi
&&
で区切られたコマンドのリストを実行する場合 (AND)または ||
(または)、コマンドの終了ステータスによって、リスト内の次のコマンドが実行されるかどうかが決まります。ここでは、 mkdir
コマンドは、 cd
の場合にのみ実行されます ゼロを返します:
cd /opt/code && mkdir project
スクリプトがexit
で終了する場合 パラメータを指定しない場合、スクリプトの終了コードは、スクリプトで最後に実行されたコマンドのコードです。
#!/bin/bash
echo "doing stuff..."
exit
exit
だけを使用する exit $?
と同じです またはexit
を省略します 。
root以外のユーザーによって呼び出された場合にスクリプトを終了する方法を示す例を次に示します。
#!/bin/bash
if [[ "$(whoami)" != root ]]; then
echo "Only user root can run this script."
exit 1
fi
echo "doing stuff..."
exit 0
スクリプトをrootとして実行すると、終了コードはゼロになります。それ以外の場合、スクリプトはステータス 1
で終了します 。
結論#
各シェルコマンドは、終了時に終了コードを返します。 exit
コマンドは、特定のステータスでシェルを終了するために使用されます。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。