Atribua uma variável a cada linha da saída e faça um loop por ela no bash

0

Peça desculpas pelo título longo.

Eu tenho um comando que terá várias linhas como saída. Vou precisar usar cada linha como uma fonte para outro comando para processá-lo. Eu estou tentando atribuir uma variável e loop através dele, mas ele falha

Aqui está a saída da linha de comando

r_mqsc -m ABCD -r "DIS CHL(*) WHERE(SSLCIPH EQ TLS_RSA_WITH_AES_256_CBC_SHA)" -l |awk '/Connected/,0'|grep -v Connected |awk -F'SSLCIPH' '{print $1}'

 CHANNEL(TO.MQ95XCAT02.SSL) CHLTYPE(CLUSRCVR)
 CHANNEL(TO.MQ95XRB01.SSL) CHLTYPE(CLUSSDR)
 CHANNEL(TO.MQ95XRC01.SSL) CHLTYPE(CLUSSDR)
 CHANNEL(TO.MQ95XRL01.SSL) CHLTYPE(CLUSSDR)
 CHANNEL(TO.MQ95XRN01.SSL) CHLTYPE(CLUSSDR)
 CHANNEL(TO.XA.MQ95XCAT02.SSL) CHLTYPE(CLUSRCVR)
 CHANNEL(TO.XB.MQ95XCAT02.SSL) CHLTYPE(CLUSRCVR)
 CHANNEL(TO.XN.MQ95XCAT02.SSL) CHLTYPE(CLUSRCVR)

Agora, cada uma dessas linhas (linha completa como está) precisa ser inserida em outro comando

como este

r_mqsc -m ABCD -r "ALTER $VARIABLE SSLCIPH('123_ABC_XYZ')" -l

Aqui está meu script, que está falhando

_chl="$(r_mqsc -m MQ95XCAT02 -r "DIS CHL(*) WHERE(SSLCIPH EQ TLS_RSA_WITH_AES_256_CBC_SHA)" -l |awk '/Connected/,0'|grep -v Connected |awk -F'SSLCIPH' '{print $1}')"
chlcnt=$(r_mqsc -m MQ95XCAT02 -r "DIS CHL(*) WHERE(SSLCIPH EQ TLS_RSA_WITH_AES_256_CBC_SHA)" -l |awk '/Connected/,0'|grep -v Connected |awk -F'SSLCIPH' '{print $1}'|wc -l)
echo "$_chl"
set -A strqmgrs ${_chl}
i=$chlcnt
arrayindex=0
while [ i -ne 0 ]
do
 chl=${strqmgrs[$arrayindex]}

r_mqsc -m MQ95XCAT02 -r "ALTER $chl SSLCIPH('TLS_RSA_WITH_AES_256_CBC_SHA256')" -l

i=$((i-1))
 arrayindex=$((arrayindex+1))
done

a variável $ chl está saindo assim

ALTER CHLTYPE - > note que está apenas tomando a palavra CHLTYPE na linha de saída real, mas não na linha inteira.

    
por MO12 20.12.2016 / 01:44

2 respostas

2

Não escreva scripts bash como você escreveria código C (nem vice-versa).

cmd |\
while IFS= read -r line
do
  ...
done
    
por 20.12.2016 / 02:12
0

se você precisa manter as variáveis configuradas no loop, faça assim:

while read -r line 
do
  stuff

done < <( **command-line** )
    
por 20.12.2016 / 03:05