監控腳本報錯

今天寫系統磁盤、cpu、內存等監控時,提示出錯:

一.出錯代碼段:

  1. cpu_usage=`echo "$time_point_1 $time_point_2" | \
  2. awk '{used=$3-$1; total+=$3+$4-$1-$2; \
  3. print used*100/total}'`
  4. if [ $cpu_usage -gt $cpu_quota ];then
  5. cpu_message=" ALARM!!! The cpu usage is over $cpu_usage!!!"
  6. return 1
  7. else
  8. return 0
  9. fi
報錯信息:
  1. ++ awk '{used=$3-$1; total+=$3+$4-$1-$2; print used*100/total}'
  2. + cpu_usage=0.498339
  3. + '[' 0.498339 -gt 80 ']'
  4. check_cpu.sh: line 31: [: 0.498339: integer expression expected
  5. + return 0
check_cpu.sh: line 31: [: 0.498339: integer expression expected
根據提示,shell期望整數表達式,而運算結果是小數0.498339,並且 -gt 只針對整數進行比較。(-lt -eq -nq 等也只針對整數進行比較)
所以先對結果取整再比較.(略去小數部分對結果基本無影響)
 修改後的代碼: 
 (1) 用awk的算術函數對結果取整,直接略去小數部分——>int 取整函數,直接去掉小數部分,不是四捨五入。
  1. cpu_usage=`echo "$time_point_1 $time_point_2" | \
  2. awk '{used=$3-$1; total+=$3+$4-$1-$2; \
  3. print int(used*100/total)}'`
  4. if [ $cpu_usage -gt $cpu_quota ];then
  5. cpu_message=" ALARM!!! The cpu usage is over $cpu_usage!!!"
  6. flag_cpu=1
  7. else
  8. flag_cpu=0
  9. fi
(2)用cut對結果進行截取,只取整數部分
  1. cpu_usage=`echo "$time_point_1 $time_point_2" | \
  2. awk '{used=$3-$1; total+=$3+$4-$1-$2; \
  3. print used*100/total}' | cut -d'.' -f 1`
  4. if [ $cpu_usage -gt $cpu_quota ];then
  5. cpu_message=" ALARM!!! The cpu usage is over $cpu_usage!!!"
  6. flag_cpu=1
  7. else
  8. flag_cpu=0
  9. fi

二 行分隔符報錯
 (1) \  行分隔符後不能有空格,空格肉眼看不到,一直抱錯,可以用遊標試探,
即:遊標是這樣的


而不是這樣的

   



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章