if-else-if 条件を論理式に結合

if-else-if 条件を論理式に結合

次の式は、if-else if文を結合する正しい方法ですか?

 if [ $TO_MAJOR -eq 7 ] ; then
   if [ $TO_MINOR -eq 3 -a $TO_PATCH -lt 2 ]; then
    echo "AE port not supported"

    elif [ $TO_MINOR -lt 3 ] ; then
            echo "AE port not supported"
    fi
 fi

到着

 if [ [ $TO_MAJOR -eq 7 ] -a [ [ $TO_MINOR -eq 3 -a $TO_PATCH -lt 2 ] -o [ $TO_MINOR -lt 3 ] ] ]; then
        echo "AE port not supported"
        fi

答え1

2番目のコードには括弧が多すぎます。 [例の同義語ですtest。したがって、目的のタスクを実行する方法は2つあります。 1つは、単一のテストステートメントですべての操作を実行することです。この場合は、括弧セットのみを使用してください。

if [ \( $TO_MAJOR -eq 7 -a $TO_MINOR -eq 3 -a $TO_PATCH -lt 2 \) -o $TO_MINOR -lt 3 ]; then

もう1つは、シェルの&&and||演算子を使用して複数のテストコマンドをリンクすることです。

if [ $TO_MAJOR -eq 7 ] && ...

[しかし、whileはと同義であり、test宣言[では意味がないため、あなたが持っていることはうまくいきませんtest

関連情報