Bash脚本在FreeBSD上温度很高时发出蜂鸣声

时间:2018-11-08 16:33:39

标签: bash freebsd beep

我一直在研究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语句不起作用。

2 个答案:

答案 0 :(得分:1)

您应该使用双括号(( ))来进行算术表达式,并且由于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)。

如果不能保证格式,则有本杰明·W(Benjamin W)提到的第二种方法,使用bc。您可以向此命令发送涉及浮点数的逻辑运算,如果为true,则返回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"

答案 1 :(得分:0)

您的直接问题是语法错误-您省略了命令([-/bin/[)和其参数($temp)之间的空格。 [的最后一个参数必须为]-您的脚本也在那里缺少空格,这使得最后一个参数为"30.1"]。顺便说一句,引号在这里不是必需的,只会使事情更难以阅读。

这是一个通用的sh脚本引用,与FreeBSD或温度测量无关。