[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Re: For com duas variaveis
From: |
MrBiTs |
Subject: |
Re: [shell-script] Re: For com duas variaveis |
Date: |
Wed, 30 Sep 2009 07:56:06 -0300 |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
> Galera,
> pintou uma duvida relativamente simples, mas que infelizmente não fui
> capaz de soluciona-la. Alguém que já passou por isso poderia me ajudar.
> Estou executando o comado abaixo no AIX, mas não estou obtendo sucesso
> o script não consegue identificar os simbolos "<<".
>
> $teste1=Arroz
> $teste2=Feijao
> $teste3=Marcarrao
> $teste4=Farofa
>
> while read VAR1 VAR2 ; do
> echo "Var1=$VAR1 Var2=$VAR2"
> done <<`echo "$teste1 $teste2
> $teste3 $teste4"`
>
> Tomei como base o script postado pelo colega no topico anterior mas
> quando tento obter as informações de uma variavel o script abenda. Vale
> lembrar que isso é uma curiosidade, pois acho muito interessante um loop com
> duas vairaveis.
>
> Efetuei alguns teste como o apresentado abaixo e obtive sucesso.
>
> while read cliente telefone ;do
> echo "$cliente $telefone ";
> done < telefone_cliente.csv
Vamos absolutamente por partes. Há conceitos básicos que,
aparentemente, você não conhece e que precisa estudar.
1) Executar comando em AIX é tão vago quanto dizer que o resultado
depende do fluxo migratório das borboletas azuis da Tanzânia. Qual é o
Shell que você usa ? Bash ? Korn ? Bourne ?
2) Declaração de variáveis
Você erra quando faz $teste1=Arroz ( e em todas as outras
variáveis ). Não se usa o $ na frente do nome da variável em sua
declaração; somente em seu acesso. Então, o trecho correto é :
teste1=Arroz
teste2=Feijao
teste3=Marcarrao
teste4=Farofa
3) Entrada de dados no laço while:
Funciona quando você faz <arquivo, já que, quando falamos de
redirecionamento, falamos de arquivos, mas não funciona para subshells
( que são abertas quando você faz um `echo blabla` (embora eu prefira
$(echo blabla) ) ). Então você pode valer-se dos named pipes. Utilize
a construção < <(echo blabla), que irá executar o echo em um subshell
e enviará o resultado para o named pipe criado pelo shell para ler o
subshell. Seu código fica assim
while read VAR1 VAR2 ; do
echo "Var1=$VAR1 Var2=$VAR2"
done < <(`echo "$teste1 $teste2 $teste3 $teste4"`)
A saída dele é
Var1=Arroz Var2=Feijao Marcarrao Farofa
que pode ser o que você não esperava.
4) O que o while read tem a ver com laços encadeados ? Para constar,
laços encadeados são o seu "for com duas variáveis". Esse é outro
conceito básico de programação. Você pode encadear laços. Pode ter if
encadeados, vários for encadeados ( e não somente 2 ), for dentro de
while dentro de case...
Recomendo vivamente leitura sobre lógica de programação e a leitura,
primeiro, do ótimo Papo de Botequim (http://www.julioneves.com) e,
depois, de coisas mais pesadas como o Advanced Bash-Script Guide
(http://tldp.org/LDP/abs/html/). Obviamente, se você trabalha com
shells diferentes do bash, pode buscar informações específicas sobre
eles em suas documentações.
MrBiTs
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32)
iEYEARECAAYFAkrDOTcACgkQrDdxWm3R8YYAxQCfYCJGjxZNuMP9zKNrmBxtpS19
ZcAAn1LFf8lNES9Vi2Oqc9T3EXFRUsZK
=+e0F
-----END PGP SIGNATURE-----
Re: [shell-script] For com duas variaveis, Leandro Santiago, 2009/09/25