我想在我的 bashrc 中编写一个脚本,告诉我我的 CPU 温度是多少(如果超过 60C)。如果低于这个温度,我希望它什么都不说。到目前为止,我有这个:
STR='sensors'
if [ "$STR | grep high" -gt "temp1: +40.1°C (high = +70.0°C)" ]
then
exec $STR | grep "high"
fi
需要帮助吗?我计划将其添加到我的 .bashrc 中,这样当我打开终端时,它就会通知我的 CPU 温度是否过高。
更新:输出自sensors
:
radeon-pci-0008
Adapter: PCI adapter
temp1: +40.0°C (crit = +120.0°C, hyst = +90.0°C)
k10temp-pci-00c3
Adapter: PCI adapter
temp1: +40.5°C (high = +70.0°C)
(crit = +100.0°C, hyst = +97.0°C)
答案1
#!/bin/bash
# Display CPU temperature, if it is above the "high" threshold.
# Desired adapter.
adapter="k10temp-pci-00c3"
# Extract given temperature from `sensors`.
get_temp(){
sensors -uA "$adapter" |
grep "$1" |
cut -d. -f1 |
grep -oE '[0-9]+$'
}
# Get current temperature.
temp1_input=$( get_temp 'temp1_input' )
# Get high temperature.
temp1_high=$( get_temp 'temp1_high' )
# Compare current temp against high.
if [[ $temp1_input -ge $temp1_high ]]; then
echo "Your CPU is ${temp1_input}°C"
fi
为什么你的方法不起作用:
[ "$STR | grep high" -gt "temp1: +40.1°C (high = +70.0°C)" ]
这是在比较两个字符串,但告诉 Bash 将它们视为整数,因此错误是“需要整数表达式”。您需要将字符串缩减为数字。(请参阅上面的函数。)无论如何,"$STR | grep high"
除非您将其放入命令替换中,否则不会执行,例如$(...)
。
exec $STR | grep "high"
exec
除非必要,否则不要使用 执行程序。另外,引用你的变量!
答案2
要获取已执行命令的输出,您需要使用反引号(`),否则您只能获取该命令的返回值。
我真的不知道你认为你的代码能做什么,但我确实知道你想让它做什么。我写了一个简短的脚本来做你想做的事。它不太灵活,我不擅长使用 REGEXawk
和sed
。
所以我做了以下事情:
#!/bin/bash
# Change the adapter to your desired one
ADAPTER="k10temp"
# Extract the high temp from the string
HIGH_TEMP=`sensors | grep -A5 "${ADAPTER}" | grep temp1 | awk '{print $5}' | sed -e 's/+//' -e 's/\..°.*//'`
# Extract the current temp from the string and print it
CURR_TEMP=`sensors | grep -A5 "${ADAPTER}" | grep temp1 | awk '{print $2}' | sed -e 's/+//' -e 's/\..°.*//'`
echo "Current temperature: ${CURR_TEMP}°C"
# check if current temp is greater or equal
if [ "${CURR_TEMP}" -ge "${HIGH_TEMP}" ]; then
echo "Do Something to keep cool."
fi
正如我所说,它可以工作,但效果不是很好。很可能有一个更短的一行代码来获取温度。
我忘了:你可以保存该脚本并授予执行权限
$ chmod u+x /PATH/TO/SCRIPT/sciptname.sh
并将/PATH/TO/SCRIPT/sciptname.sh
.bashrc
答案3
我曾经写过一个监控脚本sensors
,下面是你想要的部分脚本:
sensors | awk '/temp1/ {if (substr($2,2,2)>60) print "Temperature over 60 degrees"}'
~/.bashrc
如果您希望根据需要将此行作为单个命令运行,则可以将此行包含在 bash 函数中并放入您的。在您的sensors
输出中有两个temp1
字段,因此它会报告其中任何一个是否超过 60。您可以修改代码以打印哪个适配器温度较高,如下所示:
sensors | awk '/Adapter/{adp=$0}/temp1/ {if (substr($2,2,2)>60) print adp ": Temperature over 60 degrees"}'