0

我编写了以下 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是路径 /apps/fasigw/test/bin 中的脚本。请帮忙

4

1 回答 1

3

要在您的if语句中获取命令的输出,您应该使用命令替换,即使用$(...)而不是[..]

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 命令不匹配自己的进程的技巧)。

于 2013-01-16T09:44:49.403 回答