-3
i=0
EDA="xx7p2"
while read line
do
    echo "i is --- $i"
    echo " PACKAGE IS - --$EDA--"
    #echo $line "\n"
    if (( $i > 0 ))
    then
        package=$(echo $line | awk '{print $1}')
        echo "EDA PACKAGE IN LOOP IS ---$Eda_package---"
        if [ "$package" == "$EDA" ] ; then
            #then
            well_bias=$(echo $line | awk '{print $2}')
            biasmap=$(echo $line | awk '{print $3}')
            unified=$(echo $line | awk '{print $4}')
            echo "eda pack --$package bias is --$wel biasmap is --$biasmap  unified-           --$unified"
        fi
    fi
    i=$((i+1))
done < config.list

ここでは、2つの変数が同じであっても、2番目のifステートメント内のステートメントは実行されません。ここで何かが足りませんか?

4

2 に答える 2

1

問題の簡略化されたバージョンを作成して、問題を突き止めます。このサンプルスクリプトでは問題を再現できません。

#!/bin/bash
i=$1
a=$2
while read line
do
    if (( $i > 0 ))
    then
        echo "1st if "+$i
        if [ "$a" == "foo" ] ; then
            echo "2nd if"
        fi
    fi
    i=$((i+1))
done < nfoo.sh

nfoo.shと呼ばれ、それを呼び出します./nfoo.sh 4 bar, ./nfoo.sh -4 bar, ./nfoo.sh 4 foo and ./nfoo.sh -4 foo

あなたのエラーはパッケージの割り当てにあるのでしょうか?このような単純なタスクにawkは必要ありません。1つの単語の場合、最初の単語を抽出するためecho ${line/ */}に、awkステートメントに問題がない場合に使用します。

より多くの引数を抽出するので、配列を提案します。

#!/bin/bash
i=$1
a=$2
while read line
do
    if (( $i > 0 ))
    then
        arr=($line)
        echo "1st if "+$i
        if [ "if" == "${arr[0]}" ] ; then
            echo "2nd if: " $line
        fi
    fi
    i=$((i+1))
done < nfoo.sh

ところで:他のどこに、見出しが話しているのですか?

于 2012-06-11T11:37:08.957 に答える
0

更新:以下の小さなスクリプトを使用したより多くのテストに基づいています:

$変数の文字列の一部としてを持ってpackageいることは私にとって問題でした。Iでエスケープすると、\$以下で説明する正しい比較演算子で動作するようになります。

これを比較に使用します(前後のスペースに注意してください=

 if [ "$package" = "$EDA" ] ; then

スペースがないと、式は常にtrueと評価されるようです。(また、余談ですが、==前後にスペースを入れずに使用すると、になります[: 11: $EDAx: unexpected operator

私はこの小さなスクリプトをテストに使用しました。独自の構成を検証するために使用できます。お役に立てば幸いです。これは示されているように正しく機能します

#!/bin/bash

package="\$EDA"
echo $package

if [ "$package" = "\$EDA" ] ; then
    echo "The same"
else
    echo "Not the same"
fi

注1else :スクリプトに含まれていないため、比較の結果を確認するためにを追加しましたelse

注2:外部の暗黙的な環境設定に依存するよりも、実行するシェルを明示的に指定する方が常に良いので#!/bin/bash、スクリプトにを追加することをお勧めします。確かに害はありません。

AdvancedBash-ScriptingGuideの他の比較演算子 は次のことを示しています。

文字列の比較

=

に等しい

if ["$ a" = "$ b"]

=を構成する空白に注意してください。

["$ a" ="$b"]が上記と同等でない場合。

==は等しい

if ["$ a" == "$ b"]

これは=の同義語です。

于 2012-06-11T10:10:22.503 に答える