Bash脚本中的字符串比较未按预期工作

时间:2013-11-27 12:26:09

标签: bash shell if-statement return-value string-comparison

我有一个bash脚本调用另一个bash脚本并从第二个脚本获取字符串返回值。然后我尝试将该字符串与硬编码值进行比较,即使我认为它是正确的,它也会跳过if语句并转到其他位置。

这是一些代码,只是更改了变量名称:

returnVar=$(/bin/sh ./returnVar.sh ${1})

echo variable from second script = $returnVar

if [ "$returnVar" == "Value-Enabled false" ] ;  then 
    variableName="variable1"
    #do other stuff here


elif [ "$returnVar" == "Value-Enabled true" ] ; then 
    variableName="variable2"
    #do other stuff here

else 
    echo error  
    exit 1
fi

这个问题:

  

来自第二个脚本的echo变量=“$ returnVar”

似乎返回我想要的答案,“Value-Enabled false”,但比较不起作用。任何人都可以看到我出错的地方并知道如何提供帮助吗?

我也尝试将returnVar硬编码为我想要的字符串,然后工作!所以我不知道出了什么问题。

提前致谢!

3 个答案:

答案 0 :(得分:4)

我遇到了类似的问题,问题是其中一个字符串以' \ r'回车,另一个没有。

因此,您可能希望在比较之前清理字符串(删除任何特殊字符)。我只能抓住' \ r'当我写一个简短的python脚本来为我做字符串比较时:

#!/usr/bin/env python
import sys
if  len(sys.argv) == 3 and \
    len(sys.argv[1]) > 0 and \
    len(sys.argv[2]) > 0 and \
    sys.argv[1].rstrip('\r') == sys.argv[2].rstrip('\r'):
    print "same"
else:
    print "different\n"-

在bash中,您可以删除' \ r'来自$ str字符串的方式如下:

str_sanitized=$(echo $str | tr -d '\r')

答案 1 :(得分:2)

终于搞定了!这是适用于我的新代码:

returnVar=$(/bin/sh ./returnVar.sh ${1})

newVar=$(echo "${returnVar}" | tr -d '\n')

if [ "${newVar}" == "Value-Enabled false" ] ;  then 
    variableName="variable1"
    #do other stuff here


elif [ "${newVar}" == "Value-Enabled true" ] ; then 
    variableName="variable2"
    #do other stuff here

else 
    echo error  
    exit 1
fi

将新值保存到名为newVar的变量中,并在if语句中的newVar周围添加了大括号。

答案 2 :(得分:0)

您可以使用“-eq”操作符代替“==”来提供所需的输出。