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

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

Re: [shell-script] Contador em while


From: Henrique Bueno
Subject: Re: [shell-script] Contador em while
Date: Wed, 12 Sep 2007 14:00:00 -0300

Valew galera! já havia lido a respeito de sub-shell mas nem me passou pela
cabeça que o problema poderia estar aí...
Depois dessa, realmente nunca mais vou esquecer como o | funciona.. :s

Valew!

Em 12/09/07, Tiago Barcellos Peczenyj <address@hidden> escreveu:
>
>   Henrique
>
> Parabens, vc acaba de descobrir o conceito de subshell!
>
> quando vc faz:
>
> cat arquivo | alguma_coisa
>
> O 'alguma coisa' sera executado em um shell 'filho', ou seja, em outra
> instância.
> E outra instância de shell pode, no máximo, ver as variaveis do(s)
> shell(s) pai(s), porém ele vê via cópia, não recebe uma referência.
>
> Por isso vc nunca terá o seu PATH zoado por um script, pois mesmo que ele
> altere o PATH, as alterações só serão sentidas no subshell que o script
> esta
> rodando -- se vc deseja que isso aconteça, use o comando source.
>
> Voltando ao seu problema: como resolver?
>
> Quando vc usa um Pipe '|' vc conecta a saída padrão de um processo na
> entrada padrão de outro. Para que vc visualize o valor da variavel que vc
> deseja, o while tem que ser executado no shell corrente, algo como:
>
> alguma coisa | cat arquivo
>
> Entretanto o pipe funciona da esquerda pra direita. para vc fazer o
> redirecionamento corrento, vc pode usar o simbolo <
>
> alguma coisa < cat arquivo
>
> Ops, mas o < só funciona quando tem um arquivo à sua direita. Então fica
> bem
> mais simples:
>
> alguma coisa < arquivo
>
> OU
>
> alguma coisa < <(cat arquivo)
>
> onde <() é uma substituição de processo que onde o resultado do cat
> arquivo
> é tratado como um arquivo (na verdade um named pipe)
>
> Logo, faça
>
> while ... ; done < arquivo
>
> O livro 'Mastering UNIX Shell Scripting' mostra 12 formas de ler um
> arquivo
> linha a linha e comenta as vantagens e desvantagens de cada forma, bem
> como
> uma comparação em termos de velocidade (esta é uma das mais rápidas, senão
> a
> mais rapida). Eu devo começar a catalogar as formas mais comuns de fazer
> algumas coisas em shell script (bem como a compatibilidade com varios
> shells
> e sistemas operacionais) no meu blog (assim que der tempo).
>
> http://peczenyj.blogspot.com/search/label/Shell
>
> E, é claro, visite sempre a pagina do Julio Neves (ex: tudo o que eu
> expliquei estava dito aqui :
>
> http://twiki.softwarelivre.org/bin/view/TWikiBar/TWikiBarPapo007#Vamos_ler_arquivos
> -- porém agora que eu escrevi tudo...)
>
> []´s Tiago
>
> On 9/12/07, Henrique Bueno <address@hidden<henriquebueno%40gmail.com>>
> wrote:
> >
> > Olá Lista!
> > Estou até com vergonha em fazer essa pergunta, mas eu ainda não
> > consegui entender o que estou fazendo de errado.
> > Olhe esse script:
> > ##################################
> > #!/bin/sh
> > count=0
> > cat lista.txt |
> > while read LINHA
> > do
> > count=$((count+1))
> > echo $count
> > done
> > echo TOTAL=$count
> > ##################################
> >
> > Alguém poderia me explicar por que quando termina o while e eu mando
> > mostrar a variável $count, ela está zerada?!
> >
> > O que eu preciso fazer para usar a variável $count após o while?!
> >
> > Grato!
> >
> > --
> > Henrique Bueno
> > linux user #417797
> > ---------------------------------------------------------
> > http://www.kibibit.com.br
> > http://www.hbueno.eti.br
> >
> >
>
> --
> Tiago B Peczenyj
> Linux User #405772
>
> http://peczenyj.blogspot.com/
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Henrique Bueno
linux user #417797
---------------------------------------------------------
http://www.kibibit.com.br
http://www.hbueno.eti.br


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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