Bash脚本-ge大于等于if判断未按预期工作 温度值误报超70度
问题根因
你的if判断存在两个核心语法错误,是触发误告警的直接原因:
- 条件判断逻辑完全失效:Bash中
if 命令的语法规则是判断命令执行的退出码是否为0(即执行成功),你写的if getCpuTemp -ge 70本质是执行getCpuTemp函数,-ge和70会被当做无意义参数传入函数,只要函数执行不报错(退出码为0),就会直接进入ABOVE 70分支,全程没有执行温度值和70的大小比较。 - Bash原生的
-ge是整数比较运算符,不支持60.1这类浮点数的比对,就算补全了条件判断的标准括号写法,直接用-ge比较浮点数也会抛出语法错误。
修复方法
- 先调用
getCpuTemp将获取到的温度值存入变量,不要直接把函数写在if判断行 - 浮点数大小比较借助
bc工具实现:当比较表达式温度值 > 70成立时,bc会返回计算结果1,否则返回0,可直接被if识别为判断条件 - 修正原
tr命令里多余的转义符,避免温度值残留特殊字符导致比对异常
修复后的完整可运行代码:
function getCpuTemp { sensors cpu_thermal-virtual-0 | awk 'FNR == 3 {print $2}' | tr -d '+°C' } function sendPushNotification { curl --header 'Access-Token: <REDACTED>' \ --header 'Content-Type: application/json' \ --data-binary '{"body":"Server CPU Temp is very warm.","title":"WARNING: HIGH TEMP","type":"note"}' \ --request POST \ https://api.pushbullet.com/v2/pushes } cpu_temp=$(getCpuTemp) if (( $(echo "$cpu_temp > 70" | bc -l) )); then echo "ABOVE 70, current temp: $cpu_temp" sendPushNotification else echo "BELOW 70, current temp: $cpu_temp" fi
注:如果运行提示找不到bc命令,根据自身系统发行版执行对应安装命令即可:Debian/Ubuntu系执行
apt install bc,CentOS/RHEL系执行yum install bc。
内容的提问来源于stack exchange,提问作者saturnSam
相关产品推荐
相关产品推荐

