预期的整数表达式(Bash)

时间:2014-09-01 19:35:01

标签: linux string bash if-statement int

我正在尝试创建一个简单的脚本来检查CPU使用率是否处于某个级别。我有一个Raspberry Pi用于这个项目。

我目前唯一的问题是我有变量CPU这是CPU使用率,当脚本运行时,我收到错误

line 25: [: 4.8: integer expression expected

我不确定为什么bash会返回这个,如果BASH真的不关心像JAVA这样的int,String等。找到了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

1 个答案:

答案 0 :(得分:4)

问题是4.8是非整数值。

您可以使用bc来处理非整数值,如下所示:

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

它会将布尔表达式返回为1表示true或0表示false。