Salvar resultado em uma variável

1. Salvar resultado em uma variável

Daniel Vasconcelos
danielvasc

(usa Debian)

Enviado em 04/06/2014 - 12:10h

Olá pessoal,

Estou criando uma forma de monitorar no Cacti (servidor A) o número de consultas recursivas feitas no Bind (servidor B), porém, no meu script preciso salvar a saída do meu comando em uma variável, para que logo em seguida eu a leia e o Cacti consiga interpretar o resultado, pois se eu não fizer isso, o valor fica null.

Bom, o script é este:

#!/bin/bash
# Foi adicionada uma chave publica do Cacti no servidor do Bind

ssh root@hostdobind.com.br rndc status | awk "/$29/ { result=\$3 } END { print result ? result : 0 }" | awk -F '/' '{ print $1 }'

###################################################################

Bom, em tese se eu executar este script no terminal, ele me retorna o valor inteiro. Mas, o Cacti não consegue ler este valor da mesma maneira. Então, preciso que a saída do comando seja armazenada em uma variável, para que no final do script ele dê um echo $resultado.

Se alguém puder me ajudar, ficarei muito grato! E também se quiserem me mostrar outra expressão regular que simplifique ainda mais o código, fiquem à vontade.





  


2. Re: Salvar resultado em uma variável

Paulo
paulo1205

(usa Ubuntu)

Enviado em 05/06/2014 - 11:03h

Eu não tenho como reproduzir aqui a saída do seu comando (não faço ideia de qual seja a variável '$2' do seu script, seguida do caráter 9). Acho que você não precisaria do ssh para chamar o rndc para o servidor local: em lugar disso, você poderia copiar a chave criptográfica do servidor DNS para o servidor do Cacti e rodar o rndc diretamente de deste último (i.e. “rndc -k remotehost_keyfile -s remotehost status”).

Pelo que eu entendi, sua pergunta teria uma resposta simples. Você só queria transformar

comando 


em

a=$(comando)
echo "$a"


, mas essa transformação deveria ser totalmente inócua do ponto de vista do que sai na tela ou que é jogado, via pipe ou socket, para outro processo (suponho que seja um agente que envia dados para o Cacti). No entanto, eu acho que você teria um ganho maior se conseguisse simplificar o tal comando. No seu caso, eu imagino que a sua linha de comando, que chama um ssh, um rndc e dois awk ficaria mais eficiente (um rndc e um sed) com algo como vai abaixo.

rndc -k remoteserver.key -s remoteserver status | sed '/^recursive clients: /!d; s/^.*: \([0-9][0-9]*\).*$/\1/' 







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts