2009-11-02 323 views
6

我與下面的shell腳本測試:比較字符串在KSH平等

#!/bin/ksh -x 


instance=`echo $1 | cut -d= -f2` 
if [ $instance == "ALL" ] 
then 
echo "strings matched \n" 
fi 

它給這個錯誤的,如果條件:

: ==: unknown test operator 

==真的不正確的語法使用? 我在命令行上運行如下

test_lsn_2 INSTANCE=ALL 

有誰請提出一個解決方案。 謝謝。

+1

把雙引號括在''instance''的'if'中並再次嘗試。讓我知道,如果這項工作。 – NawaMan 2009-11-02 10:41:41

+0

不要在'$ instance'放雙引號不工作:( – Vijay 2009-11-02 10:45:23

+0

哪個版本的'ksh'是這個? – 2013-03-08 20:26:33

回答

5

我看到你正在使用ksh,但你添加了bash作爲標記,你接受bash相關的答案嗎? 使用bash,你可以做到這一點在以下方面:

if [[ "$instance" == "ALL" ]] 
if [ "$instance" = "ALL" ] 
if [[ "$instance" -eq "ALL" ]] 

要了解他們見here

+0

感謝您的回覆monte。as andre miller said == not working = working.i will accept ur answer but也爲+1 andre – Vijay 2009-11-02 10:52:55

+0

我認爲第三個選項不是一個好主意。AFAIK,-eq用於整數比較,而不是字符串。 – Daniel 2014-12-12 13:32:48

2
totest=$1 
case "$totest" in 
    "ALL") echo "ok" ;; 
    *) echo "not ok" ;; 
esac 
15

要比較字符串,你需要一個=,而不是一個雙。如果字符串爲空,則應將其放在雙引號中:

if [ "$instance" = "ALL" ] 
then 
    echo "strings matched \n" 
fi 
+0

謝謝你的建議 – Vijay 2009-11-02 10:53:24

0

我已經回答了類似的問題。基本上,您需要的運算符是=(而不是==),如果變量爲空(即它變爲if [ = ALL]),語法將中斷。詳情請看the other answer

4

嘗試

if [ "$instance" = "ALL" ]; then 

有幾個錯誤:

  1. 您需要周圍的可變雙引號,以防止它是空的(不太可能)的情況下。在這種情況下,shell將會看到if [ = "ALL" ]; then,這是無效的。

  2. shell中的等號使用單個=(shell中的if沒有辦法指定值)。