
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つだけあります。)
ファイルシステムの生の値は/sys
1/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
初期化します1
。n=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}')