为什么我会得到一个;意外操作员“;Bash中我的条件出错?

为什么我会得到一个;意外操作员“;Bash中我的条件出错?,bash,shell,ubuntu,Bash,Shell,Ubuntu,我得到了监视apache的代码。文件名为test.sh。我稍微修改了一下代码 我想要的是,当我这样做的时候: ./test.sh -H localhost -wr 2 -cr 5 -arg cpu_load 它应该测试apache的cpu\u负载,也就是说,我试图用-arg参数控制对apache的监控,但这似乎不起作用 当我运行此命令时: ./test.sh -H localhost -wr 2 -cr 5 -arg cpu_load 我得到一个错误: ./test.sh: 282: [:

我得到了监视apache的代码。文件名为
test.sh
。我稍微修改了一下代码

我想要的是,当我这样做的时候:

./test.sh -H localhost -wr 2 -cr 5 -arg cpu_load
它应该测试apache的
cpu\u负载
,也就是说,我试图用
-arg
参数控制对apache的监控,但这似乎不起作用

当我运行此命令时:

./test.sh -H localhost -wr 2 -cr 5 -arg cpu_load
我得到一个错误:

./test.sh: 282: [: -ge: unexpected operator
./test.sh: 286: [: -ge: unexpected operator
以下是部分代码:

#!/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
我在哪里出错?

如果
条件中的一个变量(
user\u arg
warn\u req
等)可能为空

更好的编写方法是将变量引用为(如果您想将其作为整数进行比较,则可能会失败):

或者,另一种方法是指定默认值,以便if变量为null或未定义if时不会失败,如下所示

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

如果不需要POSIX兼容性,可以改用bash的算术求值命令:

if (( user_arg >= 0 && user_arg < crit_req )); then
if((用户参数>=0&&user参数
未设置的变量将被隐式处理为0值,因此不需要使用默认值扩展

if (( user_arg >= 0 && user_arg < crit_req )); then