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
相关产品推荐
相关产品推荐

