2013-11-27 50 views
2

我有一個bash腳本調用另一個bash腳本並從第二個腳本獲取字符串返回值。然後我嘗試將該字符串與硬編碼值進行比較,儘管我認爲它是正確的,但它跳過了if語句並轉到其他語句。在Bash腳本中的字符串比較不按預期工作

下面是一些代碼,只是改變變量名:

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 

這staement:

從第二個腳本= 「$ returnVar」

呼應變量似乎返回答案我想要「啓用虛擬值」,但比較結果不起作用。任何人都可以看到我要去哪裏錯,並知道如何提供幫助?

我也嘗試硬編碼returnVar作爲我想要的字符串,然後工作!所以我不知道有什麼問題。

在此先感謝!

+1

嘗試'echo「X $ {returnVar} X」'看看它是否包含空格? – halfbit

+0

使用echo「X $ {returnVar} X」給出輸出 Line1:X Line2:Value-Enabled falseX 這意味着在開始時可能會有一個換行符? 不好意思的格式..不能使它工作正常:( –

+0

如果我是正確的,然後'回聲「X $ {returnVar} X」'會返回兩個X的最小值,之前和之後一個'returnVar'在腳本的echo行),問題是:'returnVar'中是否有前導或尾隨的空白?(如果被X's包圍,它將是可見的)。 – halfbit

回答

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變量,在如果語句添加圍繞newVar大括號。

2

我遇到了類似的問題,問題是其中一個字符串以'\ 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,那麼你可以刪除從$ STR字符串「\ r」以下方式:

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

Thanxx很多..我是一個初學者是無法找出問題。 :)它爲我工作.. –