두 개의 센서를 가져와 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
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
변수에 두 개의 값이 추가됩니다. 두 개의 변수로 분할하려면 아래 코드를 사용할 수 있습니다. (최적은 아니지만 저에게는 효과적입니다.)
VAR1=$(echo $VAR|awk '{print $1}')
VAR2=$(echo $VAR|awk '{print $2}')