私はこれを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.