2016-10-21 10 views
1

commandから返されるステータスがブール値(0 == true)と解釈されるif command ; then something ; fiを実行することができます。また、if [[ $a > $b || $c == yes ]] ; then something; fiを実行しても問題ありません。"if-then-else"でコマンドを使用したブール式

しかし私は、if cmd1 || cmd2; then ; something; fiのように、 "if"を使ったブール式のようなコマンドを組み合わせることは許されないので興味があります。それとも?

"if"またはifをネストしていなくてもこれを行う他の方法があります。しかし、私はif :-)を使用することに興味があります。

コメントありがとうございます。

答えて

0

これをここに残しておきます。

check_and() { 
    if grep -q A <<<"$1" && grep -q C <<<"$1"; then 
     echo YES 
    else 
     echo NO 
    fi 
} 

check_or() { 
    if grep -q A <<<"$1" || grep -q C <<<"$1"; then 
     echo YES 
    else 
     echo NO 
    fi 
} 

check_and ABC# YES 
check_and ABD # NO 
check_and ZBC# NO 
check_and ZBD # NO 

check_or ABC# YES 
check_or ABD # YES 
check_or ZBC# YES 
check_or ZBD # NO 
3

これは間違いありません。 ifステートメントへの条件は、リストと定義されています。大まかに言って、またはの2つのリストが&&または||で結合されています。これらはブーリアン演算子ではありませんが、似ています。 a && baと実行された場合、 が実行され、aが成功すると実行されます。 a || baで実行された場合、 が実行され、aが失敗すると実行されます。

[[ ... ]]はビルトインコマンドであることを考えると

if [[ $a > $b || $c == yes ]]; then # conditional operators 
if [[ $a > $b ]] || [[ $c == yes ]]; then # shell operators 

の比較、両者の間にはほとんど違いがあります。ただし、シェルの演算子は等しい優先順位を持ち、条件式演算子&&は条件式||よりも高い優先順位を持ちます。つまり、

if a || b && c; then # same as (a || b) && c 
if [[ a || b && c ]]; then # same as a || (b && c) 
関連する問題