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

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

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

<オール>
  • -e flag は、スクリプトがエラー時に終了するように指示します。その他のフラグ

    エラーが発生した場合、すぐに終了します。

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

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

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

    username を探します /etc/passwd で ファイル。

    • 見つかった場合、終了ステータス $? 0 と等しくなります .

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

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

    に変更します
    if [ $? -ne 0 ]
    

    ロジックを正しく理解するために。

    ただし ユーザーが存在しない場合、egrep エラーコードを返し、 -e のために オプションを指定すると、シェルはその行の直後に終了するため、コードのその部分に到達することはありません。


    すべての bash コマンド ライン スイッチは、man bash に記載されています。 .

          -e      Exit  immediately  if a pipeline (which may consist of a
                  single simple command),  a subshell command enclosed  in
                  parentheses,  or one of the commands executed as part of
                  a command list enclosed by  braces  (see  SHELL  GRAMMAR
                  above) exits with a non-zero status.  The shell does not
                  exit if the command that fails is part  of  the  command
                  list  immediately  following  a  while or until keyword,
                  part of the test  following  the  if  or  elif  reserved
                  words,  part  of any command executed in a && or || list
                  except the command following the final  &&  or  ||,  any
                  command  in a pipeline but the last, or if the command's
                  return value is being inverted with !.  A trap  on  ERR,
                  if set, is executed before the shell exits.  This option
                  applies to the shell environment and each subshell envi-
                  ronment  separately  (see  COMMAND EXECUTION ENVIRONMENT
                  above), and may cause subshells to exit before executing
                  all the commands in the subshell.
    

    Linux
    1. Bashの「評価」コマンド?

    2. UnixターミナルでExitコマンドはどのように機能しますか?

    3. bashスクリプトで set -e とはどういう意味ですか?

    1. Bashでの$#の使用は何ですか

    2. 構文 |&はシェル言語で何を意味しますか?

    3. 「!」の意味は何ですか? -d` この Bash コマンドで?

    1. コマンド ラインの矢印 (->) 記号は何を意味しますか?

    2. bashの&>と>&の違いは何ですか?

    3. Linux のパイプ記号 |行う?