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语句中的语句。我在这里错过了什么吗?
答案 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
添加到脚本中,肯定不会受伤。
Advanced Bash-Scripting Guide显示:
字符串比较
=
等于
if [“$ a”=“$ b”]
请注意 =。
的空白框架如果[“$ a”=“$ b”]与上述不相等。
==等于
if [“$ a”==“$ b”]
这是=。
的同义词