あなたの投稿には実際には 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.