传感器并保存到变量

传感器并保存到变量

我正在尝试获取两个传感器并将两个答案添加到bash脚本中的变量中。

我得到了这个,但它不适合我的需要。

[root@**** ~]# sensors
coretemp-isa-0000
Adapter: ISA adapter
Core 0:       +40.0°C  (high = +80.0°C, crit = +96.0°C)
Core 1:       +45.0°C  (high = +80.0°C, crit = +96.0°C)
Core 2:       +50.0°C  (high = +80.0°C, crit = +96.0°C)
Core 8:       +47.0°C  (high = +80.0°C, crit = +96.0°C)
Core 9:       +48.0°C  (high = +80.0°C, crit = +96.0°C)
Core 10:      +45.0°C  (high = +80.0°C, crit = +96.0°C)

coretemp-isa-0001
Adapter: ISA adapter
Core 0:       +36.0°C  (high = +80.0°C, crit = +96.0°C)
Core 1:       +44.0°C  (high = +80.0°C, crit = +96.0°C)
Core 2:       +41.0°C  (high = +80.0°C, crit = +96.0°C)
Core 8:       +42.0°C  (high = +80.0°C, crit = +96.0°C)
Core 9:       +44.0°C  (high = +80.0°C, crit = +96.0°C)
Core 10:      +48.0°C  (high = +80.0°C, crit = +96.0°C)


[root@*** ~]# sensors | sed -rn 's/.*Core 0:\s+.([0-9]+).*/\1/p'
40
36

我需要将 40 和 36 保存到变量中。是否有办法将它们添加到bash脚本中的两个单独的变量中?

答案1

您还可以绕过该sensors命令并直接从文件系统读取值/sys

VAR1RAW=$(cat /sys/devices/platform/coretemp.0/hwmon/hwmon*/temp1_input)
VAR1=$(expr $VAR1RAW / 1000)
VAR2RAW=$(cat /sys/devices/platform/coretemp.1/hwmon/hwmon*/temp1_input)
VAR2=$(expr $VAR2RAW / 1000)

(路径元素上的星号hwmon*允许我们忽略 hwmon 设备号:当我们通过路由进入时.../platform/coretemp.N/...,该级别只有一个匹配的目录。)

文件系统中的原始值/sys以千分之一度表示,因此您需要除以 1000。由于expr仅进行整数算术,因此也会同时删除小数。

答案2

这一切都可以仅使用一个简单的 awk oneliner 来实现。例如:

awk '/Core 0:/{i[$3+0];} END { n=1; for(a in i) printf("%s=%d\n", "var"n++,a)}'
  • 匹配图案/Core 0/
  • 创建一个数组变量i[$3+0]。将+0删除数字后的所有内容
  • 将变量初始化n1n=1。循环槽索引并通过递增变量打印结果n

笔记!按照惯例,环境变量(PATH、EDITOR、SHELL...)和内部 shell 变量(BASH_VERSION、RANDOM...)都是完全大写的。所有其他变量名称都应小写。由于变量名称区分大小写,因此此约定可以避免意外覆盖环境变量和内部变量。

答案3

你可以尝试这样的事情:

VAR=$(sensors | sed -rn 's/.*Core 0:\s+.([0-9]+).*/\1/p'|tr '\n' ' ')

这会将换行符替换为空格并将两个值添加到VAR变量中。如果你想将它们分成两个变量,你可以使用下面的代码(我知道它不是最佳的,但对我有用)

VAR1=$(echo $VAR|awk '{print $1}')
VAR2=$(echo $VAR|awk '{print $2}')

相关内容