【问题标题】:Error in using if condition in Unix shell script在 Unix shell 脚本中使用 if 条件时出错
【发布时间】:2013-01-16 09:29:20
【问题描述】:

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

【问题讨论】:

    标签: shell unix ksh


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      相关资源
      最近更新 更多