这是什么意思[:-ge:意外的运营商,在bash? [英] What does this mean [: -ge: unexpected operator, in 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屋!