在bash中if else中的错误

时间:2012-06-11 09:54:59

标签: linux bash

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语句中的语句。我在这里错过了什么吗?

2 个答案:

答案 0 :(得分: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/ */},而我的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

顺便问一下:其他地方在哪里,标题是在说什么?

答案 1 :(得分:0)

更新:基于使用以下小脚本进行的更多测试:

$作为package变量中字符串的一部分对我来说是一个问题。如果我用\$转义它,我可以使用下面提到的正确比较运算符。

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

 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

Note2 :明确指定要运行的shell而不是依赖于某些外部隐式环境设置总是更好,因此我建议您将#!/bin/bash添加到脚本中,肯定不会受伤。

来自Other Comparison Operator

Advanced Bash-Scripting Guide显示:

  

字符串比较

     

=

     

等于

     

if [“$ a”=“$ b”]

     

请注意 =。

的空白框架      

如果[“$ a”=“$ b”]与上述不相等。

     

==等于

     

if [“$ a”==“$ b”]

     

这是=。

的同义词