这是什么意思[:-ge:意外的运营商,在bash? [英] What does this mean [: -ge: unexpected operator, in bash?

查看:128
本文介绍了这是什么意思[:-ge:意外的运营商,在bash?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很新的shell脚本和学习它。我得到了code监测的Apache。该文件的名称是 test.sh 。我改变了code位。

I'm very new to shell scripting and learning it. I got the code for monitoring apache. The name of the file is test.sh. I changed the code a bit.

我一直在寻找,当我做的:

What I was looking for is, when I do :

./test.sh -H localhost -wr 2 -cr 5 -arg cpu_load

这应该测试其 cpu_load 的Apache。即我试图控制监视我的 -arg 参数的Apache。

It should test apache for its cpu_load. i.e I tried to control monitoring apache with my -arg parameter.

但是,这似乎并不奏效。

But that doesn't seem to be working.

当我运行这样的:

./test.sh -H localhost -wr 2 -cr 5 -arg cpu_load

我得到的错误:

./test.sh: 282: [: -ge: unexpected operator
./test.sh: 286: [: -ge: unexpected operator

下面是code的某些部分:

Here is some part of the code :

#!/bin/sh


while test -n "$1"; do
    case "$1" in
        --help|-h)
            print_help
            exit $ST_UK
            ;;
        --version|-v)
            print_version $PROGNAME $VERSION
            exit $ST_UK
            ;;
        --hostname|-H)
            hostname=$2
            shift
            ;;
        --port|-P)
            port=$2
            shift
            ;;
        --timeout|-t)
            timeout=$2
            shift
            ;;
        --remote-server|-R)
            remote_srv=1
            ;;
        --binary_path|-b)
            path_binary=$2
            shift
            ;;
        --pid_path|-p)
            path_pid=$2
            shift
            ;;
        --pid_name|-n)
            name_pid=$2
            shift
            ;;
        --status-page|-s)
            status_page=$2
            shift
            ;;
        --secure|-S)
            secure=1
            ;;
        --warning-req|-wr)
            warn_req=$2
            shift
            ;;
        --critical-req|-cr)
            crit_req=$2
            shift
            ;;
    --userargument|-arg)
       user_arg=$3
       shift
           ;;
        *)
            echo "Unknown argument: $1"
            print_help
            exit $ST_UK
            ;;
    esac
    shift
done

#other codes

    if [ ${wclvls_req} = 1 ]
    then
        if [ ${user_arg} -ge ${warn_req} -a ${user_arg} -lt ${crit_req} ]
        then
            echo "WARNING - ${output} | ${perfdata}"
            exit $ST_WR
        elif [ ${user_arg} -ge ${crit_req} ]
        then
            echo "CRITICAL - ${output} | ${perfdata}"
        exit $ST_CR
        else
            echo "OK - ${output} | ${perfdata}"
            exit $ST_OK
        fi
    else
        echo "OK - ${output} | ${perfdata}"
        exit $ST_OK
    fi

fi

如果我做了错误的?

Where I'm making the mistake?

先谢谢了。

推荐答案

你的一个变量( user_arg warn_req 等)在如果条件可能是空的。

One of your variables ( user_arg, warn_req etc ) in the if condition might be empty.

更好的编写方式是引用了变量(如果你想比为整数可能你的情况不及格):

Better way to write that is with quoting the variables as (which may fail in your case if you want to compare as integers):

if [ "${user_arg}" -ge "${warn_req}" -a "${user_arg}" -lt "${crit_req}" ]

或者另一种方式是指定的默认​​值,所以如果变量为空或未定义,如果不如下失败。

Or another way is to specify the default values so that if variable is null or undefined if won't fail as below.

if [ ${user_arg:-0} -ge ${warn_req:-0} -a ${user_arg:-0} -lt ${crit_req:-0} ]

这篇关于这是什么意思[:-ge:意外的运营商,在bash?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆