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
问问题
483 次
4 回答
4
如果有多个实例hnb_gw.exe
,pidof 将返回多个 pid。-z
of[
只需要一个 pid 。一种解决方案可能是使用-s
pidof 的开关只返回一个 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 回答