我想写一个shell脚本来检查进程是否正在运行:
#!/bin/bash
var=$1
ps -ef|grep $var|grep -v grep > /dev/null
if [ $? -eq 0 ]
then
echo $var is running!
else
echo $var is not running!
fi
然而,无论我在命令行中输入什么参数,结果总是显示">xxx正在运行";。如下所示:
[test@XXXserver ~]$ sh check.sh 23ljfado
23ljfado is running!
但是,如果我直接在脚本中指定参数,结果就会正确显示。例如,如果脚本中的变量var更改为var=23ljfado,则结果如下所示:
[test@XXXserver ~]$ sh check.sh
23ljfado is not running!
如果我将var更改为正在运行的进程,例如,让脚本中的var=python,那么结果是">python正在运行";
我希望这个变量可以通过命令行参数传递到脚本中,但为什么传递的参数在我的shell脚本中不起作用
ps输出还包括shell脚本及其会导致检查失败的参数。在这种情况下,您将不得不再提供一个条件来消除自身
#!/bin/bash
var="$1"
name=$(basename $0)
ps -ef|grep $var|grep -v -e grep -e $name > /dev/null
if [ $? -eq 0 ]
then
echo $var is running!
else
echo $var is not running!
fi