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发出蜂鸣声或播放声音文件?

电脑启动时出现急促的蜂鸣声是怎么回事?

在 .NET 的控制台上打印 ASCII 0x07 字符时,这会导致系统发出蜂鸣声

使电脑蜂鸣器发声小脚本

tmux - 在附加/分离时禁用蜂鸣声

蜂鸣器怎么才能发出连续不断的报警音