Shell脚本错误:“[:参数太多”

时间:2016-02-04 07:12:01

标签: linux bash shell

我正在编写一个小脚本,我必须检查特定进程是否正在运行?然后根据我必须采取行动。 而且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。

有语法错误吗?可以帮助吗?

3 个答案:

答案 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