2013-01-16 62 views
0

我寫了下面的shell腳本:錯誤使用,如果條件的Unix shell腳本

#!/bin/ksh 
main() 
{ 
    echo 'Checking if process is running...' 
    if [ [ps -ef|grep "Djava.security.auth.login.config"|grep -v grep|wc -l] != 0 ]; then 
      echo "startEventProcessorScript is not running" 
      nohup /apps/fasigw/test/bin/startEventProcessor & 
    fi 

    echo '******************************************************************' 
    echo ' Script started successfully ' 
    echo '******************************************************************' 
} 
main $* 

當我執行上面的腳本,我收到以下錯誤信息:

Checking if process is running... 
main[3]: test: ] missing 
wc: illegal option -- ] 
usage: wc [-c|-m] [-lw] [name ...] 

我我無法解決這個問題。 startEventProcessor是一個位於path/apps/fasigw/test/bin中的腳本。請幫助

回答

3

要在if聲明中獲得命令的輸出,應該使用command substitution,即使用$(...)而不是[..]

if [ $(ps -ef|grep "Djava.security.auth.login.config"|grep -v grep|wc -l) != 0 ] 

注意,這可以簡化爲:

if [ $(pgrep -cf "Djava.security.auth.login.config") != 0 ] 

或:在"[D]java..."

if ps -ef | grep -q "[D]java.security.auth.login.config"; then 

(括號是經常用於確保grep命令不特技匹配自己的過程)。