2012-07-09 103 views
1

我寫這個劇本:當我運行它,我有一個消息檢查什麼設備都在運行和執行行動

#!/bin/sh 

DEVICE=`sysctl hw.machine` 

if [ $DEVICE = "hw.machine: iPhone3,1" ] 
then 
    echo "Test Done" 
else 
    echo "Test failed" 
fi 

./test: line 5: [: too many arguments爲什麼不工作?

回答

1

您應該總是報價您的擴展。 [是測試命令的別名。就像任何其他命令一樣,它需要參數。 $ DEVICE變量在命令運行之前展開。

如果$ DEVICE包含空格,該命令是這樣的:

[ foo bar = "hw.machine: iPhone3,1" ] 

在這個例子中test越來越參數「foo」和「酒吧」的比較操作之前「=」。

你需要引用的擴展:

if [ "$DEVICE" = "hw.machine: iPhone3,1" ] 

另外一個需要注意的是,如果在bash使用[[,這是分詞不的[[內發生是不是一個問題。

有關報價的更多信息,請參閱以下內容:http://mywiki.wooledge.org/Quotes