我正在编写一个小脚本,我必须检查特定进程是否正在运行?然后根据我必须采取行动。 而且shell是bash。
检查进程是否正在运行? From This 我试过了,
Process_Num='ps -ef | grep /opt/sro/bin/srocmsd | grep -v "grep" | wc -l'
if [ $Process_Num -eq 1 ]
then
***Do Stuff***
else
***Do Stuff***
fi
但我收到错误:
**Error : line 191: [: too many arguments**
在shell / terminal上直接运行相同的命令时,输出为1。
有语法错误吗?可以帮助吗?
答案 0 :(得分:5)
要将命令执行的结果放在环境变量中,您应该将命令放在反引号(`)中或使用$(command)
语法:
Process_Num=$(ps -ef | grep /opt/sro/bin/srocmsd | grep -v "grep" | wc -l)
答案 1 :(得分:2)
你可能想在这里使用背引号:
Process_Num='ps -ef | grep /opt/sro/bin/srocmsd | grep -v "grep" | wc -l'
即
Process_Num=`ps -ef | grep /opt/sro/bin/srocmsd | grep -v "grep" | wc -l`
^ ^
答案 2 :(得分:2)
你甚至不需要通过两次调用grep
然后wc -l
来计算行数并将整个事情放在命令替换中来使它变得如此复杂。
您可以使用grep -q
获取grep
的退出状态:
if ps cax | grep -Fq 'srocmsd'
then
echo "found matching process"
else
echo "Didn't find matching process"
fi