今天写系统磁盘、cpu、内存等监控时,提示出错:
一.出错代码段:
cpu_usage=`echo "$time_point_1 $time_point_2" | \
awk '{used=$3-$1; total+=$3+$4-$1-$2; \
print used*100/total}'`
if [ $cpu_usage -gt $cpu_quota ];then
cpu_message=" ALARM!!! The cpu usage is over $cpu_usage!!!"
return 1
else
return 0
fi
报错信息:
++ awk '{used=$3-$1; total+=$3+$4-$1-$2; print used*100/total}'
+ cpu_usage=0.498339
+ '[' 0.498339 -gt 80 ']'
check_cpu.sh: line 31: [: 0.498339: integer expression expected
+ return 0
check_cpu.sh: line 31: [: 0.498339: integer expression expected
根据提示,shell期望
整数表达式,而运算结果是小数0.498339,并且 -gt 只针对整数进行比较。(-lt -eq -nq 等也只针对整数进行比较)
所以先对结果
取整再比较.(略去小数部分对结果基本无影响)
修改后的代码:
(1) 用awk的
算术函数对结果取整,直接略去小数部分——>
int 取整函数,直接去掉小数部分,不是四舍五入。
cpu_usage=`echo "$time_point_1 $time_point_2" | \
awk '{used=$3-$1; total+=$3+$4-$1-$2; \
print int(used*100/total)}'`
if [ $cpu_usage -gt $cpu_quota ];then
cpu_message=" ALARM!!! The cpu usage is over $cpu_usage!!!"
flag_cpu=1
else
flag_cpu=0
fi
(2)用cut对结果进行截取,只取整数部分
cpu_usage=`echo "$time_point_1 $time_point_2" | \
awk '{used=$3-$1; total+=$3+$4-$1-$2; \
print used*100/total}' | cut -d'.' -f 1`
if [ $cpu_usage -gt $cpu_quota ];then
cpu_message=" ALARM!!! The cpu usage is over $cpu_usage!!!"
flag_cpu=1
else
flag_cpu=0
fi
二 行分隔符报错
(1) \ 行分隔符后不能有空格,
空格肉眼看不到,一直抱错,可以用游标试探,
即:游标是这样的
而不是这样的