if或while循环内部case命令位置参数

时间:2012-02-17 22:57:16

标签: bash

除了bash脚本之外,我已经创建了一个脚本

  • 检查进程是否正在运行
  • 将PID输出到shell
  • 如果没有提示用户输入并启动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

即使放入yes,这似乎总是会返回-p test。我知道我做了一些根本错误的事情,看着grep -v grep最后完成的详细输出,因此我相信它总是返回0的退出状态。

1 个答案:

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