2014-09-01 68 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