除了bash脚本之外,我已经创建了一个脚本
我已经转移到位置参数,无法看到我出错的地方:
if [ "$1" == "" ]; then
proc_finder
elif [ $1 != "" ];then
case $1 in
-p | --process )
shift
z=$(ps aux |grep $1 |grep -v grep > /dev/null)
if [ ! -z "$z" ]; then
echo "YES"
else
echo "NO"
fi
;;
* )
echo "Usage -p (process)"
esac
fi
即使放入yes
,这似乎总是会返回-p test
。我知道我做了一些根本错误的事情,看着grep -v grep
最后完成的详细输出,因此我相信它总是返回0的退出状态。
答案 0 :(得分:1)
不应该是if [ $? -eq 0 ]
?
编辑1
你可以试试这个:
z=`ps aux | grep $1 | grep -v grep > /dev/null`
if [ ! -z "$z" ]; then
echo "YES"
else
echo "NO"
fi
如果$z
不为空(-z
:测试零长度字符串),则表示使用ps
命令找到了该进程。
编辑2
ps ... grep ... grep
正在重定向到/dev/null
。这意味着z
将不包含任何内容。删除重定向,z
应该有一些输出。
z=`ps aux | grep $1 | grep -v grep`
编辑3
或者,您可以这样做:
ps aux | grep $1 | grep -v grep > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "YES"
else
echo "NO"
fi
在这种情况下,您不保存grep输出。如果你真的不需要它,这很好。