if else質問がありますが、答えが正しいかどうかわかりません。 [コピー]

if else質問がありますが、答えが正しいかどうかわかりません。 [コピー]

私はこれをLinuxで実行しています:

$ number=4
$ test $number -eq 4
$ echo $?
0
$ test $number -lt 2
$ echo $?
1

結果(0と1)は正しいですか?

答え1

Unixシステムでは、ユーティリティがエラーなしでスムーズで正常に実行されると、ユーティリティはゼロ終了ステータスを返します。ユーティリティが失敗した場合は、ゼロ以外の終了ステータスを返します。

これにより、シャットダウン状態で問題が発生したときにユーザーに通知できます(「終了値」または一部のマニュアルの同様のセクションを参照)rsync。簡単に言えば、ジョブが成功すると終了ステータスは0になり、ゼロでない場合は失敗し、終了ステータスは失敗の理由を示すことができます。

使用するユーティリティはtestこのパターンに従い、比較が成功すると( "true")、0を返します。比較(または実行するすべてのアクション)が失敗した場合(「false」)、ゼロ以外の終了ステータスを返します。

このifキーワードは、ユーティリティを使用して終了状態に応じて機能します。ユーティリティがゼロ終了ステータスを返す場合はデフォルトのブランチを使用し、それ以外の場合は次のブランチをelse使用します。

if test 4 -eq 3; then
    echo 4 is 3
else
    echo 4 is not 3
fi

ifすべてのユーティリティを使用できます。

if grep -q 'secret' file.txt; then
    echo file.txt contains secret
else
    echo file.txt does not contain secret
fi
if mkdir mydir; then
    echo created directory mydir
else
    echo failed to create directory mydir
fi

答え2

通常、0これは操作が成功したことを意味し、ゼロ以外の値はエラーです。したがって、$?裏面0テストは成功し、そうでなければ0裏面1テストは失敗する。

以下を実行すると、より明確に確認できます。

$ number=4
$ if test $number -eq 4; then echo "YES ($?)"; else echo "NO ($?)"; fi
YES (0)
$ if test $number -lt 2; then echo "YES ($?)"; else echo "NO ($?)"; fi
NO (1)

答え3

シェルはそうではありませんC。 0は偽ですが、C残りはすべて真です。シェル0は真/成功ですが、他のすべては偽です。失敗する方法はたくさんありますが、成功する方法は1つあるからです。

具体的な情報はテスト情報ページで提供されます。

Exit status:

 0 if the expression is true,
 1 if the expression is false,
 2 if an error occurred.

関連情報