2014-09-01 70 views
1

我想創建一個簡單的腳本,檢查CPU使用率是否在某個級別。這個項目我有一個Raspberry Pi。整數表達預期(Bash)

我目前唯一的問題是,我有自己的變量CPU這是CPU使用率,在腳本運行時,我得到的錯誤

line 25: [: 4.8: integer expression expected 

我不知道爲什麼bash的回報這一點,如果BASH真的不關心int,String等,就像JAVA一樣。發現那here

另外,我有if語句:if $CPU -gt 1僅用於測試(它應該現在就返回true)

red='\e[0;31m' 
yellow='\e[1;33m' 
NC='\e[0m' # No Color 
echo -e "${NC}Starting Server!${NC}" 
echo -e "${red}Errors in red!${NC}" 
echo -e "${yellow}Info in yellow!${NC}" 
sleep 1 
echo -e "\n\n" 
##CPU USAGE STUFF 
echo -e "${yellow}Current CPU Usage:" 
CPU=$(top -bn1 | grep "Cpu(s)" | \ 
      sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \ 
      awk '{print 100 - $1""}') 
echo $CPU % 
echo -e "${NC}**********${NC}" 
cd /root/mc_server/ 
sleep 1 


##CPU USAGE LOOP CHECKER 
while : 
do 
     sleep 5 
     echo $CPU 
     if [ $CPU -gt 1 ] 
     then 
     echo -e "${red}ALERT! CPU Usage is TOO HIGH!${red}" 
     fi 

done 
## 


##java -Xmx400M -jar bukkit.jar -o true 
+0

整數表示整數。如果你通過bash的值爲4.8,那麼它開始想知道它是否需要查找指數值,即。 4.800889e27,這將是很多工作;-)。只需圍繞4.8的值或截斷它,然後你將有一個整數值,將工作。 'case $ CPU in * \。*)CPU = $ {CPU %%。*} ;; esac'可能會有所幫助。祝你好運。 – shellter 2014-09-01 19:55:09

+0

@shellter謝謝,我會繼續嘗試 – 2014-09-01 19:56:28

+0

@ Olivr3000作爲避難所說,只需從'$ CPU'獲取整數。最有效的方法是通過子字符串提取從右側刪除包括小數點在內的所有內容。 'CPU = $ {CPU%。*}''%%'可以工作,唯一的區別就是從右側開始刪除所有出現的'.',而'%'是'首次出現'。 – 2014-09-01 20:12:27

回答

4

的問題是,4.8是一個非整數值。

可以採用BC來處理非整數值,像這樣:

if [[ $(echo "$CPU > 1" | bc -l) -eq 1 ]]; 

它將返回布爾表達式是1點的真或0假。

+1

謝謝,代碼很好地工作。 – 2014-09-01 20:08:34

+0

不是問題:) – ShaneQful 2014-09-01 20:09:35