Bash 在 FreeBSD 上温度过高时发出蜂鸣声的脚本
Bash script to beep when temperature hot on FreeBSD
我一直在研究 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
语句不起作用。
你应该用双括号(( ))
做算术表达式,因为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
。您可以向此命令发送涉及浮点数的逻辑运算,它 returns 如果为真则为 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
) 之间的 space。 [
的最后一个参数必须是 ]
-- 您的脚本也缺少一个空格,这使得最后一个参数成为 "30.1"]
。顺便说一句,这里不需要引号,只会让事情更难阅读。
这是一个通用的 sh 脚本引用,它与 FreeBSD 无关,也与温度测量无关。
我一直在研究 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
语句不起作用。
你应该用双括号(( ))
做算术表达式,因为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
。您可以向此命令发送涉及浮点数的逻辑运算,它 returns 如果为真则为 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
) 之间的 space。 [
的最后一个参数必须是 ]
-- 您的脚本也缺少一个空格,这使得最后一个参数成为 "30.1"]
。顺便说一句,这里不需要引号,只会让事情更难阅读。
这是一个通用的 sh 脚本引用,它与 FreeBSD 无关,也与温度测量无关。