You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本-ge大于等于if判断未按预期工作 温度值误报超70度

问题根因

你的if判断存在两个核心语法错误,是触发误告警的直接原因:

  1. 条件判断逻辑完全失效:Bash中if 命令的语法规则是判断命令执行的退出码是否为0(即执行成功),你写的if getCpuTemp -ge 70本质是执行getCpuTemp函数,-ge和70会被当做无意义参数传入函数,只要函数执行不报错(退出码为0),就会直接进入ABOVE 70分支,全程没有执行温度值和70的大小比较。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:12:17