Sensores e salvando na variável

1

Estou tentando obter dois sensores e adicionar as duas respostas à variável em um script bash .

Eu tenho isso, mas não é adequado às minhas necessidades.

[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]+).*//p'
40
36

Eu preciso de 40 e 36 salvos em variáveis. Existe alguma maneira de adicioná-los em duas variáveis separadas em um script bash ?

    
por Wayno 06.11.2018 / 07:26

3 respostas

1

Você também pode ignorar o comando sensors e ler os valores diretamente do sistema de arquivos /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)

(O asterisco no elemento do caminho hwmon* nos permite ignorar o número do dispositivo hwmon: como estamos entrando na rota .../platform/coretemp.N/... , haverá apenas um diretório correspondente nesse nível.)

Os valores brutos no sistema de arquivos /sys são expressos em milésimos de graus, então você precisará dividir por 1000. Como expr só faz a aritmética inteira, isso também elimina as decimais ao mesmo tempo .

    
por 06.11.2018 / 10:38
1

Tudo isso poderia ser alcançado usando apenas um simples awk liner. Por exemplo:

awk '/Core 0:/{i[$3+0];} END { n=1; for(a in i) printf("%s=%d\n", "var"n++,a)}'
  • Corresponder padrão /Core 0/
  • Crie uma variável de matriz i[$3+0] . O +0 irá remover tudo após o dígito
  • Inicialize a variável n para 1 como em: n=1 . Faça um loop pelos índices e imprima os resultados incrementando a variável n .

NOTE! By convention, environment variables (PATH, EDITOR, SHELL, ...) and internal shell variables (BASH_VERSION, RANDOM, ...) are fully capitalized. All other variable names should be lowercase. Since variable names are case-sensitive, this convention avoids accidentally overriding environmental and internal variables.

    
por 06.11.2018 / 13:56
0

Você pode tentar algo como:

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

Isso substituirá a nova linha pelo espaço e adicionará os dois valores à variável VAR . Se você quiser separá-los em duas variáveis, você pode usar o código abaixo (eu sei que não é o ideal, mas funciona para mim)

VAR1=$(echo $VAR|awk '{print $1}')
VAR2=$(echo $VAR|awk '{print $2}')
    
por 06.11.2018 / 07:43

Tags