次の内容を含むbashスクリプトがあります。
#!/bin/bash -e
egrep "^username" /etc/passwd >/dev/null
if[ $? -eq 0 ]
then
echo "doesn't exist"
fi
-e がない場合、スクリプトは実行されません。-e
このスクリプトは何をしますか?また、$?
このような状況ではどうすればよいですか?
ベストアンサー1
あなたの投稿には実際に2つの質問が含まれています。
この
-e
フラグは、エラーが発生したときにスクリプトを終了するように指示します。その他のフラグエラーが発生するとすぐに終了します。
$?
最後のコマンドの終了状態です。 Linuxでは、終了ステータスはコマンドが0
成功したことを示します。他の状態は、エラーが発生したことを意味します。
これらの答えをスクリプトに適用するには:
egrep "^username" /etc/passwd >/dev/null
username
ファイルから検索されます/etc/passwd
。
見つかった場合、終了ステータス
$?
はと同じです0
。見つからない場合、終了ステータスは別のステータス(ではない
0
)になります。ここでecho "doesn't exist"
コードの一部を実行する必要があります。
残念ながらスクリプトにエラーがあります。コードを実行します。ユーザーが存在する場合- 行を次に変更します。
if [ $? -ne 0 ]
正しいロジックを得るために。
しかし、ユーザーが存在しない場合はegrep
エラーコードが返され、この-e
オプションによりシェルはその行の直後に終了するため、コードの該当部分に到達できません。