センサーを検出して変数に保存

センサーを検出して変数に保存

2つのセンサーを取得し、bashスクリプトの変数に2つの答えを追加したいと思います。

私はこれを得たが、それは私のニーズに合わない。

[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スクリプトの2つの別々の変数に追加する方法はありますか?

答え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/...レベルには一致するディレクトリが1つだけあります。)

ファイルシステムの生の値は/sys1/1000度単位で表されるため、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番号の後の内容はすべて削除されます。
  • 変数を次にn初期化します1n=1スロットインデックスを繰り返し、変数を増やして結果を印刷しますn

ノート!通常、環境変数(PATH、EDITOR、SHELL ...)と内部シェル変数(BASH_VERSION、RANDOM ...)はすべて大文字です。他のすべての変数名は小文字でなければなりません。変数名は大文字と小文字を区別するため、この規則は誤って環境変数と内部変数を上書きするのを防ぎます。

答え3

次のように試すことができます。

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

これにより、改行文字が空白になり、VAR変数に2つの値が追加されます。 2つの変数に分割するには、次のコードを使用できます。 (最適ではありませんが、私にとっては効果的です。)

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

関連情報