shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Re: Concatenar variáveis do laço for


From: Julio C. Neves
Subject: Re: [shell-script] Re: Concatenar variáveis do laço for
Date: Wed, 30 Apr 2014 12:37:17 -0300

Acho que a melhor forma de fazer é usando arrays.

O for seria assim:
for alarme in `snmpwalk  -v$VERSAO_SNMP $HOST -c $COM_SNMP -On 1.3.6.1.2.1.33.1.6.2.1.2` ; do 
    id_alarme=$(echo $alarme | awk -F"." '{print $NF}')
    let vetor[$id_alarm]++
done

Vc monta a saída:
for indice in "${!vetor[@]}"
do
    case $indice in
        9) printf '%30s %5i\n' "Modo bypass automatico ativo" ${vetor[indice]}
           ;;
       14) printf '%30s %5i\n' "Saida do nobreak desligada" ${vetor[indice]}
           ;;
        *) printf '%30s %5i\n' "Alarme desconhecido" ${vetor[indice]}
  ;;
 esac

Provavelmente alguns ajustes serão necessários por que fiz sem testar, mas a essência creio que seja essa (a não ser que não tenha entendido a sua dúvida). Repare que é quase bash puro e portanto bastante performático.

Abcs,
Julio
@juliobash
Próximos cursos de Shell
Cidade         Local Período
Rio de Janeiro EDX 26-30/05
Dou treinamento de shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.



Em 30 de abril de 2014 10:38, <address@hidden> escreveu:
 

Grato Julio.

Segue sua "aula" e mais abaixo exemplo de retorno e meu script completo:

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

O for é uma solução bem mais lenta que as seguintes:

» Para colocar na variável Nomes
    Nomes=$(cat /tmp/nomes.txt)

» Para colocar no vetor Nomes
    # Até o Bash 3
        Nomes=($(cat /tmp/nomes.txt))
        Mapfile Nomes < /tmp/nomes.txt
A última é a mais veloz

Mas temos de tomar alguns cuidados, veja:
$ cat frutas
abacate
maçã
morango
pera
tangerina
uva

$ Nomes=$(cat frutas)   # Colocando em uma variável
$ echo $Nomes           # Bobeando com o $IFS
abacate maçã morango pera tangerina uva
$ echo "$Nomes"         # Processo certo
abacate
maçã
morango
pera
tangerina
uva

Usando vetores:
$ Nomes=($(cat frutas))
$ echo $Nomes
abacate             # Aparece somente a 1ª
$ echo ${Nomes[@]}  # Para listar todas
abacate maçã morango pera tangerina uva
$ mapfile Nomes < frutas
echo ${Nomes[@]}
abacate maçã morango pera tangerina uva
$ echo ${Nomes[0]}   # Lista somente o elemento zero
abacate
$ echo ${Nomes[3]}   # Lista o elemento três
pera

Abcs,
Julio
@juliobash

#########
Exemplo de saída do comando snmpwalk:

.1.3.6.1.2.1.33.1.6.2.1.2.2 = OID: .1.3.6.1.2.1.33.1.6.3.9
.1.3.6.1.2.1.33.1.6.2.1.2.3 = OID: .1.3.6.1.2.1.33.1.6.3.14

#########

##########
Meu script
##########

#!/bin/bash
IFS=$'\n';
qtde_alarmes="0"
for alarme in `snmpwalk  -v$VERSAO_SNMP $HOST -c $COM_SNMP -On 1.3.6.1.2.1.33.1.6.2.1.2` ; do 
 qtde_alarmes=$(expr $qtde_alarmes + 1)
 id_alarme=$(echo $alarme | awk -F"." '{print $NF}')
 case "$id_alarme" in
    "9") descr_alarme="$qtde_alarmes)Modo bypass automatico ativo"
  ;;
    "14") descr_alarme="$qtde_alarmes)Saida do nobreak desligada"
  ;;
       *) descr_alarme="Alarme desconhecido"
  ;;
 esac
 total_descr_alarme="$total_descr_alarme$descr_alarme "
done
total_descr_alarme=$(echo $total_descr_alarme | sed 's/[ ]*$//')
if [ $qtde_alarmes -gt 0 ] ; then
 if [ $qtde_alarmes == 1 ] ; then
  echo ATENCAO: $qtde_alarmes alarme - $total_descr_alarme
  exit 1
 else
  echo ATENCAO: $qtde_alarmes alarmes - $total_descr_alarme
  exit 1
 fi
else
 echo OK: Nenhum alarme
 exit 0
fi
###########

Grato pelo retorno

Diramos



reply via email to

[Prev in Thread] Current Thread [Next in Thread]