首页 > 解决方案 > 当 FreeBSD 上温度过高时,Bash 脚本会发出哔哔声

问题描述

我一直在研究一个 Bash 脚本,当 PC 太热时会发出哔哔声。我已删除哔声以尝试识别问题。到目前为止我所拥有的:

temp=$(sysctl -n hw.acpi.thermal.tz0.temperature | tr -d 'C')
echo $temp

if ["$temp" -gt "30.1"]
then
   echo "temp hot"
else
   echo "temp ok"
fi

我的输出是

54.1
temp.sh: line 4: [54.1: command not found
temp ok

删除if语句只是输出

54.1

所以我认为这if是行不通的声明。

标签: bashfreebsdbeep

解决方案


你应该使用双括号(( ))来做算术表达式,因为 Bash 不能处理十进制值,你只需要删除点(就像你想把它乘以十一样)。

temp=$(sysctl -n hw.acpi.thermal.tz0.temperature | tr -d 'C')
max_temp=50.2

(( ${temp//./} > ${max_temp//./} )) && echo "temp hot" || echo "temp ok"

确保对两个值使用相同的格式(尤其是前导零,54.10将变为5410)。

如果不能保证格式,还有第二种方法,正如 Benjamin W 提到的,使用bc. 您可以向此命令发送涉及浮点数的逻辑操作,如果为真则返回 0,否则返回 1。

temp=$(sysctl -n hw.acpi.thermal.tz0.temperature | tr -d 'C')
max_temp=50.2

(( $(echo "$temp > $max_temp" | bc) )) && echo "temp hot" || echo "temp ok"

推荐阅读