Bash条件文

Bash条件文

Bashスクリプトで使用される条件文の3つの形式は何ですか?

ベストアンサー1

これBash マニュアルの関連部分条件付き評価に使用できる5つの構成がリストされています。これらの中でifcaseおよび[[ .. ]]コンストラクタはおそらく実際のコードで最も一般的に使用されますが、この(( .. ))構文は複雑な計算やその他の数値演算を実行するスクリプトでよく使用されます。

しかし、bashから分岐する別の非常に一般的な形式は言及していません。つまり、段落評価でコマンドを実行することです。

grep -q needle haystack.txt && echo "Needle located!" || echo "No dice or needles.";

&&||論理演算子はそれぞれ「and」と「or」です。

これは実際には次のとおりです。

if grep -q needle haystack.txt; then echo "yea"; else echo "nay"; fi;

しかし、別の方法で動作します。最初の形式では、条件付きロジックは実際にはコードの実際の明示的なターゲットの副作用であり、少なくとも表面的には論理演算子を評価します。この設定はCコードとJavaScriptコードでも一般的です。

これはショートカットを使って機能します。たとえば、式の一部はx && y || z左から右に評価されます。論理and(xin)の左側がx && yfalseと評価されている場合、この時点ですでにfalseであることがわかっているため、bashその部分を評価する必要はありません。yx && y

論理ORの場合、その逆も真です。true || zつまり、z の結果が何であれ、常に真と評価されます。

したがってgrep、結果がfalseの場合、式の対応する部分はtrueにはできないため、bash最初にスキップできます。echoそれで2番目に進みますecho。一方、grepがtrueの場合、echo最初のエントリが実行されます(単語がエコーされます...)。これは、右の値に関係なく、式がまだtrueと評価されるためbashに行われます。||

Bashが条件文を使用する方法を理解するには、コマンドラインでいくつかの実験を実行するのが最善です。注文する

echo $?;

エコーされます戻りコード以前の声明。これはエラーコードなので0trueを表し、ゼロ以外の値はfalseを表します。最初は少し混乱していますが、慣れています。

だからあなたは次のことをすることができます

$ (( 1 + 2 == 3 )); echo $?
0
$ (( 1 + 2 == 4 )); echo $?
1

[[ .. ]]そして、これらの基本コンポーネントを理解するために、構成に対して同様のテストを実行します。完了したら、ifプレゼンテーションに進みますcase

あなたの質問に対する回答は、あなたが質問している状況によって大きく変わることがあると思います。しかし、オプションをよく理解すると、彼らが何をしたいのかを理解するのに役立ちます。

おすすめ記事