5
 cplane_pid=`pidof hnb_gw.exe`
    if [ -z $cplane_pid ]
    then
        STATUS=`failure`
        echo "Cplane hnbgw running     $STATUS"
    else
        STATUS=`success`
        echo "Cplane hnbgw running     $STATUS"
    fi      
    echo
4

4 回答 4

4

如果有多个实例hnb_gw.exe,pidof 将返回多个 pid。-zof[只需要一个 pid 。一种解决方案可能是使用-spidof 的开关只返回一个 pid。

于 2013-06-18T09:25:13.510 回答
4
于 2013-06-18T09:25:34.897 回答
1

当你执行

cplane_pid=`pidof hnb_gw.exe`

然后cplane_pid可以包含更多(空格分隔)项目。

所以在

if [ -z $cplane_pid ]

会变成

if [ -z firstPid secondPid etc ]

那是你的错误"[: too many arguments"

您可以通过引用变量来解决此问题(您应该始终在 shell 中执行此操作)

if [ -z "$cplane_pid" ]

或使用[[(如果它已安装在您的系统上),这在许多方面都更好。例如,您不需要引用变量:)

if [[ -z $cplane_pid ]]

是相同的

if [[ -z "$cplane_pid" ]]

出于测试目的(以及类似的错误),请使用 -x hasbang bash 选项

#!/bin/bash -x

或使用调试部分

-- normal code --
set -x # debug section starts here
[ -z $cplane_pid ] && echo zero
eval something
set +x # debug section ends here
-- normal code --

你也可以调用脚本

/bin/bash -x yourScript.sh
于 2013-06-18T09:38:20.387 回答
0

pidof 可以返回多个 pid,在这些情况下,您的测试将获得太多参数。

于 2013-06-18T09:25:14.050 回答