GNU/Linux >> Linux の 問題 >  >> Linux

Bashの終了コマンドと終了コード

多くの場合、Bashスクリプトを作成するときは、特定の条件が満たされたときにスクリプトを終了するか、コマンドの終了コードに基づいてアクションを実行する必要があります。

この記事では、Bashの exitについて説明します。 組み込みコマンドと実行されたコマンドの終了ステータス。

終了ステータス#

各シェルコマンドは、正常または失敗のいずれかで終了すると、終了コードを返します。

慣例により、終了コードがゼロの場合はコマンドが正常に完了したことを示し、ゼロ以外の場合はエラーが発生したことを示します。

特別な変数$? 最後に実行されたコマンドの終了ステータスを返します:

date &> /dev/nullecho $?

日付 コマンドは正常に完了し、終了コードはゼロです:

0

lsを実行しようとした場合 存在しないディレクトリでは、終了コードはゼロ以外になります:

ls /nonexisting_dir &> /dev/nullecho $?
2

ステータスコードを使用して、コマンドが失敗した理由を確認できます。各コマンドのマニュアルページには、終了コードに関する情報が含まれています。

マルチコマンドパイプラインを実行する場合、パイプラインの終了ステータスは最後のコマンドの終了ステータスになります。

sudo tcpdump -n -l | tee file.outecho $?

上記の例では、 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で終了する場合 パラメータを指定しない場合、スクリプトの終了コードは、スクリプトで最後に実行されたコマンドのコードです。

〜/ script.sh
#!/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 コマンドは、特定のステータスでシェルを終了するために使用されます。

ご質問やご意見がございましたら、お気軽にコメントをお寄せください。


Linux
  1. Bashコマンドラインの終了コードがわかりやすく説明されています

  2. バッシュ演算子の違い[[Vs[Vs(Vs((?

  3. bash エクスポート コマンド

  1. Bash の eval コマンドとその典型的な使用法

  2. Bashのコマンド置換への変数代入の終了コード

  3. -e は bash シバンで何をしますか?

  1. コマンドライン(bash)の「And」の違い??

  2. Linux の Bash 終了コードとは

  3. Bash:コマンド終了ステータスが 0 になるまでループする