2012-02-17 30 views
2

相对较新比的bash脚本其他任何东西,我创建了一个脚本来如果或者当某个进程在运行里面

  • 检查的情况下命令的位置参数循环
  • 输出PID对外壳
  • 如果不提示用户输入并启动etc/etc,则为

我移动到位置参数并不能看到我要去哪里错了:

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 

这似乎总是在-p test例如将何时返回yes均匀。我知道我做了一些根本性的错误,看着详细的输出grep -v grep是最后完成,因此我相信它总是返回退出状态0.

+1

'ps aux | grep $ 1 |如果可能的话,grep -v grep'应该简化为'ps -C $ 1',至少Linux ps能够这样做。 – 2012-02-19 10:30:50

回答

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的输出。如果你不需要它,那很好。

+0

为什么在'grep -v grep'调用之后你有一个管道'|'? 什么是'$ z'意味着要自己做所有事情?这将永远返回0 – 2012-02-17 23:20:01

+0

好点,删除但仍然相同 – user1217286 2012-02-17 23:23:11

+0

你可以编辑你的代码来反映你所做的改变吗? – 2012-02-17 23:25:43

相关问题