-eはbash shebangで何をしますか?

-eはbash shebangで何をしますか?

次の内容を含むbashスクリプトがあります。

#!/bin/bash -e

egrep "^username" /etc/passwd >/dev/null 
if[ $? -eq 0 ] 
then 
  echo "doesn't exist" 
fi

-e がない場合、スクリプトは実行されません。-eこのスクリプトは何をしますか?また、$?このような状況ではどうすればよいですか?

ベストアンサー1

あなたの投稿には実際に2つの質問が含まれています。

  1. この-eフラグは、エラーが発生したときにスクリプトを終了するように指示します。その他のフラグ

    エラーが発生するとすぐに終了します。

  2. $?最後のコマンドの終了状態です。 Linuxでは、終了ステータスはコマンドが0成功したことを示します。他の状態は、エラーが発生したことを意味します。

これらの答えをスクリプトに適用するには:

egrep "^username" /etc/passwd >/dev/null

usernameファイルから検索されます/etc/passwd

  • 見つかった場合、終了ステータス$?はと同じです0

  • 見つからない場合、終了ステータスは別のステータス(ではない0)になります。ここでecho "doesn't exist"コードの一部を実行する必要があります。

残念ながらスクリプトにエラーがあります。コードを実行します。ユーザーが存在する場合- 行を次に変更します。

if [ $? -ne 0 ]

正しいロジックを得るために。

しかし、ユーザーが存在しない場合はegrepエラーコードが返され、この-eオプションによりシェルはその行の直後に終了するため、コードの該当部分に到達できません。

おすすめ記事