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

[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-----


reply via email to

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