.bashrc - if 语句帮助

.bashrc - if 语句帮助

我想在我的 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

这是Kev Inski 的回答

#!/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

要获取已执行命令的输出,您需要使用反引号(`),否则您只能获取该命令的返回值。

我真的不知道你认为你的代码能做什么,但我确实知道你想让它做什么。我写了一个简短的脚本来做你想做的事。它不太灵活,我不擅长使用 REGEXawksed

所以我做了以下事情:

#!/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"}' 

相关内容