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

Busybox Shell实现温度浮点运算与华氏度转换方法

Busybox 环境读取thermal节点温度并转华氏度方案

Busybox 自带的ash shell仅支持整数运算,无法直接处理浮点精度计算与单位转换,直接用内置awk实现即可,无额外依赖,适配全量标准Busybox固件。
摄氏度转华氏度换算公式:F = C * 9 / 5 + 32


可直接运行的实现代码

逐节点遍历避免type和temp字段错位,自动完成原始值转摄氏度、转华氏度、保留两位小数的全流程:

for zone_path in /sys/class/thermal/thermal_zone*/; do
    zone_type=$(cat "${zone_path}type")
    temp_raw=$(cat "${zone_path}temp")
    temp_f=$(awk -v raw="$temp_raw" 'BEGIN{printf "%.2f", raw/1000 * 9 / 5 + 32}')
    echo "${zone_type}: ${temp_f}°F"
done

逻辑说明

  • 遍历所有thermal_zone目录,单独读取每个节点的类型和原始温度值,解决多热节点场景下直接通配符cat导致的字段顺序错位问题
  • 通过awk的-v参数将shell读取到的原始温度整数传入awk上下文,全程无多余管道调用,执行效率高
  • 用awk内置的printf格式化功能直接实现两位小数精度控制,不需要额外拼接其他处理逻辑
  • 用到的for循环、cat、awk、echo均为Busybox默认编译集成的内置命令,不需要额外安装任何组件

扩展:同时输出摄氏度与华氏度

如果需要同步展示摄氏温度,可调整为如下写法:

for zone_path in /sys/class/thermal/thermal_zone*/; do
    zone_type=$(cat "${zone_path}type")
    temp_raw=$(cat "${zone_path}temp")
    read temp_c temp_f <<EOF
$(awk -v raw="$temp_raw" 'BEGIN{c=raw/1000; f=c*9/5+32; printf "%.2f %.2f", c, f}')
EOF
    echo "${zone_type}: ${temp_c}°C / ${temp_f}°F"
done

注:极少数深度裁剪的Busybox固件如果移除了awk组件,可替换为bc工具做浮点计算,但awk在Busybox固件中的集成度远高于bc,优先使用上述awk方案。

内容的提问来源于stack exchange,提问作者ZacWolf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:09:25