Problema com shell [RESOLVIDO]

1. Problema com shell [RESOLVIDO]

Rafael
supertchuco

(usa Solaris)

Enviado em 17/03/2011 - 12:47h

Bom dia a todos estou tentando fazer um comando shell, mas eu não entendo o porque dele não funcionar...

O tal comando é esse:
grep "\<patch id=*\>" /opt/SBM75/patches/sbm-patches.xml | awk '{print $2}' | sed -ne 's/.*=//g' -e 's/\"//gp' | while read LINE; do if [ "$FINAL" = "" ] then FINAL=$LINE else FINAL="$FINAL, $LINE" fi echo $FINAL; done

O mesmo apresenta esse erro: -bash: syntax error near unexpected token `done'

Só que se eu faço esse comando (tirando o if e colocando um echo)funciona...

Então creio que o problema está na estrutura do if dentro do while...que não estou conseguindo enxergar...






  


2. Re: Problema com shell [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 17/03/2011 - 14:05h

falta ponto-e-vírgula em algumas partes:

grep "\<patch id=*\>" /opt/SBM75/patches/sbm-patches.xml | awk '{print $2}' | sed -ne 's/.*=//g' -e 's/\"//gp' | while read LINE; do if [ "$FINAL" = "" ]; then FINAL=$LINE ; else FINAL="$FINAL, $LINE"; fi; echo $FINAL; done


3. Re: Problema com shell [RESOLVIDO]

Rafael
supertchuco

(usa Solaris)

Enviado em 17/03/2011 - 16:56h

Kra é quase isso....

quando eu rodei esse seu comando deu os echos certo, mas... eu tirei o echo:

grep "\<patch id=*\>" /opt/SBM75/patches/sbm-patches.xml | awk '{print $2}' | sed -ne 's/.*=//g' -e 's/\"//gp' | while read LINE; do if [ "$FINAL" = "" ]; then FINAL=$LINE ; else FINAL="$FINAL, $LINE"; fi; done

o comando roda sem erros....

Após dou um echo na variavel Final e a mesma está vazia, por que isso ?


4. Re: Problema com shell [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 17/03/2011 - 17:32h

talvez a variável $FINAL esteja recebendo um valor que contém espaço, nesse caso precisa usar aspas ao imprimir o valor com o echo:
echo "$FINAL"

é bom sempre usar aspas ao definir variáveis, assim evita erros semelhantes, como no caso do seu comando:
FINAL=$LINE (troque por FINAL="$LINE")


5. Re: Problema com shell [RESOLVIDO]

Rafael
supertchuco

(usa Solaris)

Enviado em 17/03/2011 - 18:04h

Não é isso, vi em outros fóruns que algumas pessoas tiveram esse problema, e não teve solução aparente, além de trocar por um for.....
Putz que porcaria esse while.


6. Re: Problema com shell [RESOLVIDO]

Rafael
supertchuco

(usa Solaris)

Enviado em 18/03/2011 - 10:48h

Resolvi assim:

LIST=`grep "\<patch id=*\>" /opt/SBM75/patches/sbm-patches.xml | awk '{print $2}' | sed -ne 's/.*=//g' -e 's/\"//gp'`
for LINE in $LIST
do
if [ "$OTTO" = "" ]
then
OTTO=$LINE
else
OTTO="$OTTO, $LINE"
fi
done
fi;

Me parece que há um problema de escopo no while que ao sair do laço perde o valor da variável....não entendi isso afinal..


7. Re: Problema com shell [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 18/03/2011 - 12:40h

acho que algo assim funcionaria:

FINAL=
codigo | while read LINE; do
if [[ "$FINAL" = "" ]; then
FINAL="$LINE"
else
FINAL="$FINAL, $LINE"
fi
done
echo $FINAL

não?


8. Re: Problema com shell [RESOLVIDO]

Rafael
supertchuco

(usa Solaris)

Enviado em 18/03/2011 - 13:33h

Pode até ser, mas na real eu queria deixar como uma unica linha...como estava no inicio do tópico..






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts