-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

这里即使两个变量相同,第二个 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。对于一个单词,只提取第一个单词,你会使用echo ${line/ */}while I see nothing wrong in your awk-statement。

由于您提取了更多参数,因此我建议使用一个数组:

#!/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对我来说是个问题。如果我用 a 转义它,\$我可以让它与下面提到的正确比较运算符一起工作。

使用它进行比较(注意之前/之后的空格=

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

没有空格,表达式似乎总是评估为真。(另外,顺便说一句,==在之前/之后使用不带空格将导致[: 11: $EDAx: unexpected operator

我使用这个小脚本进行测试,您可以使用它来验证自己的构造,希望对您有所帮助。如图所示,这可以正常工作

#!/bin/bash

package="\$EDA"
echo $package

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

注意1:我添加了else以确定比较的结果,因为您的脚本不包含任何else

注意2:明确指定要运行的shell而不是依赖于一些外部隐式环境设置总是更好,所以我建议你将它添加#!/bin/bash到你的脚本中,它肯定不会受到伤害。

Advanced Bash-Scripting Guide中 的其他比较运算符显示:

字符串比较

=

等于

如果 [ "$a" = "$b" ]

请注意构成 = 的空格

if [ "$a"="$b" ] 不等价于上述。

== 等于

如果 [ "$a" == "$b" ]

这是 = 的同义词。

于 2012-06-11T10:10:22.503 回答