1

私のコードは次のとおりです。

if [ "$server" == "a" ]; then
        echo "apache"
fi

if [ "$server" ==  "t"   ]
then
        echo "tomcat"
else
        echo "Entered"
fi

の値は$serverですttomcat値がコンソールに出力されることを期待しています。でもEnteredプリントも!

私はこれについて混乱しています。ifelseステートメントの両方が実行されるのはなぜですか?

4

2 に答える 2

5

elseブランチは、先行するifステートメントがfalseと評価された場合にのみ実行する必要があります。私が知っているその規則には、実際には例外はありません。問題を引き起こしているbashファイルで何か他の怪しいことが起こっている可能性があります。

スクリプトを実行しているのがbashであることを確認してください。#!/bin/bash最初の行にある必要があります。

于 2012-10-20T08:18:56.523 に答える
4

問題を解決するには、次のようにします。

  • エコーステートメントをすべてのブランチに配置します。

    if [ "$server" == "a" ]; then
        echo "in branch apache"
        echo "apache"
    fi
    
    if [ "$server" ==  "t"   ]
    then
            echo "in branch tomact"
            echo "tomcat"
    else
            echo "in else branch"
            echo "Entered"
    fi
    

それでも問題を特定できない場合は、次のいずれかを実行してください。

  • -xフラグを使用してスクリプトを実行します

    bash -x <scriptname>
    
  • すべての行をコメントアウトします...次に、行ごとにコメントを付けて、どのような結果が得られるかを確認します

于 2012-10-20T10:00:44.253 に答える