web-dev-qa-db-ja.com

条件が偽かどうかを確認する

それは簡単な質問のようです、なぜグーグルは何も役に立たなかったのだろうか?StackOverflowでもチュートリアルでも。条件が偽であることをbashを使用して確認する必要があります。

私が見つけたものの私が試した

if ! [ 0==2 ]; then echo Hello; fi

そして

if [ ! 0==2 ]; then echo Hello; fi 

それらのどれもHelloを出力しません。

似たような質問は2つしか見つかりませんでしたが、どちらの場合も最終回答は「false」条件を使用しないようにコードを再構築しました。

37
Hi-Angel

もしかして:

if ! [ 0 == 2 ]; then
  echo Hello;
fi

等号演算子の周りにスペースがありません。

これは http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html -特にif then elseおよび演算子に関するセクションを読む時間です。私は通常、スクリプトを書いているときにこれを開いています。

63
wojciii

数学的な評価には、bashで(( ))を使用します。テキストには[[ ]]を使用します。

if (( $i == 0 )); then
  echo "i is 0"
else
  echo "i is unequal 0"

bashの比較演算子について詳しくはこちらをご覧ください

二重括弧の詳細

10
RedX

testコマンド([..])を使用している場合、整数の比較オプションを使用できます:-eq、等しい、および-ne、等しくない.

if [ 0 -eq 2 ]; then echo true ; else echo false ; fi # false
if [ 0 -eq 0 ]; then echo true ; else echo false ; fi # true

if [ 0 -ne 2 ]; then echo true ; else echo false ; fi # true
if [ 0 -ne 0 ]; then echo true ; else echo false ; fi # false

Bashでは、演算子[...]は、ファイルタイプをチェックして値を比較するコマンドであるtestと同等です。 testは内部コマンドです。type [を使用してシェルに要求すると、[ is a built in Shell commandと応答します。通常、バイナリは/usr/bin/[にもあります。

test EXPRESSIONまたはman testから読み取ることができるように、構文はinfo coreutils test invocationです。

省略されたEXPRESSIONのデフォルトはfalseです。それ以外の場合、EXPRESSIONはtrueまたはfalseであり、終了ステータスを設定します。

これは、カムが少しよく理解するのに役立つという男からの抜粋です

  • (EXPRESSION) EXPRESSIONはtrueです。そのため、操作0==1と見なすのは簡単にエラーになります。 (操作はスペースを含む0 == 10==1は式です)。

  • !EXPRESSION EXPRESSIONはfalseです。

  • ...
  • INTEGER1 -eq INTEGER2 INTEGER1はINTEGER2と等しい
  • INTEGER1 -ne INTEGER2 INTEGER1はINTEGER2と等しくない

info coreutils test invocationから、テストの終了ステータスについて読むことができます。

終了ステータス:

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

Bashの数学的評価に加えて、ifの代わりにブール式を使用できます。

[max@localhost:~] $ (( 0 == 0 )) && echo True || echo False
True
[max@localhost:~] $ (( 0 != 0 )) && echo True || echo False
False
3