为什么我会得到一个;意外操作员“;Bash中我的条件出错?
我得到了监视apache的代码。文件名为为什么我会得到一个;意外操作员“;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: [:
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