2011-09-15 159 views
0

我有一個shell腳本以下行:shell腳本錯誤

if [ -f /etc/init.d/tomcat6 && ps -C java|grep -qs 'java' ]; then 

,當我嘗試運行它會拋出了以下錯誤:

line 12: [: missing `]' 

我有一種感覺,這是一個編碼問題,因爲我一直在windows xp pc上編輯Notepadd ++中的文件,我確定我已經設置編碼以UTF-8編碼,沒有BOM,並且所有行結束都是linux樣式,但我仍然收到這個錯誤。

任何人都可以幫忙嗎?

感謝

回答

2

嘗試

if [ -f /etc/init.d/tomcat6 ] && ps -C java | grep -qs 'java'; then 
    ... 
fi 

[是基本上爲test命令的別名。 test不知道任何關於論點ps。或者您也可以使用test明確地(只是爲了澄清語法):如果你使用[代替test

if test -f /etc/init.d/tomcat6 && ps -C java | grep -qs 'java'; then 
    ... 
fi 

,你被迫與]結束的表達。

+1

除了'ps'永遠不會傳遞給'''。 –

+2

[期望它的最後一個參數是']',而語法錯誤是它不是。 shell調用3個命令:「[-f /etc/init.d/tomcat6」和「ps -C java」和「grep -qs'java']」...除了它實際上沒有調用第二個第一個失敗(所以你不會從grep得到有關文件']'的錯誤,不存在。) –

1

&&結束你的[命令。

if [ -f /etc/init.d/tomcat6 ] && ps -C java | grep -qs 'java'; then 
1

的語法是-a

您需要運行ps -C java|grep -qs 'java',它目前被評估爲一個表達式。試試這個:

if [ -f /etc/init.d/tomcat6 -a $(ps -C java|grep -qs 'java') ]; then