在Unix shell脚本中使用if条件时出错

时间:2013-01-16 09:29:20

标签: shell unix ksh

我编写了以下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中的脚本。请帮忙

1 个答案:

答案 0 :(得分: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 ]

或:

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

"[D]java..."中的括号是经常用来确保grep命令与其自己的进程不匹配的技巧。)