今天寫系統磁盤、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!!!"
else
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) \ 行分隔符後不能有空格,空格肉眼看不到,一直抱錯,可以用遊標試探,
即:遊標是這樣的
而不是這樣的