센서를 감지하고 변수에 저장

센서를 감지하고 변수에 저장

두 개의 센서를 가져와 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/...해당 수준에는 일치하는 디렉터리가 하나만 있습니다.)

파일 시스템의 원시 값은 /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으로 초기화합니다 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변수에 두 개의 값이 추가됩니다. 두 개의 변수로 분할하려면 아래 코드를 사용할 수 있습니다. (최적은 아니지만 저에게는 효과적입니다.)

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

관련 정보