我一直在研究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
语句不起作用。
答案 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或温度测量无关。