Bash脚本在FreeBSD温度升高时发出蜂鸣声
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bash脚本在FreeBSD温度升高时发出蜂鸣声相关的知识,希望对你有一定的参考价值。
当PC太热时,我一直在研究一个Bash脚本来发出蜂鸣声。我已经删除了蜂鸣声以尝试识别问题。到目前为止我所拥有的:
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
声明不起作用。
答案
您应该使用双括号(( ))
来执行算术表达式,并且由于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
。您可以向此命令发送涉及浮点数的逻辑运算,如果为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"
另一答案
你的直接问题是语法错误 - 你省略了命令([
- /bin/[
)和它的参数($temp
)之间的空格。 [
的最后一个参数必须是]
- 你的脚本也缺少一个空白,这使得最后一个参数"30.1"]
。这里没有必要引用BTW,只会让事情变得更难阅读。
这是一个通用的sh脚本定义,它与FreeBSD无关,也与温度测量无关。
以上是关于Bash脚本在FreeBSD温度升高时发出蜂鸣声的主要内容,如果未能解决你的问题,请参考以下文章
在bash脚本/命令中,如何使PC发出蜂鸣声或播放声音文件?