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

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

Re: [shell-script] while não lê sem new_line


From: Flavio Torres
Subject: Re: [shell-script] while não lê sem new_line
Date: Mon, 21 Sep 2009 22:16:23 -0300
User-agent: Thunderbird 2.0.0.23 (Windows/20090812)

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Denis S. Costa wrote:
> desculpem a mensagem anterior sem assunto
>
> tenho um programa em shell com uma sintaxe parecida com essa:
>
>
>
> while read linha; do
>
>     echo "$linha"
>
>     echo ""
>
> done < texto.txt
>
>
>
> Bom, acontece que o texto que uso as vezes não tem quebra de linha na
ultima linha:
>
>
>
> oi, tudo bem? \n
>
> tudo e com você? \n
>
> bem...
>
>
>
> (as duas primeiras linha tem uma quebra de linha e a ultima não!)
>
>
>
> essa linha sem quebra de linha não entra no loop! não lida pelo
while!!! por que?
>
>
Da uma lida na estrutura de loop aqui:
http://asis.epfl.ch/GNU.SYS/bash-1.14.7/features_1.html


Posto aqui duas formas para resolver, deve ter algumas mais que o
pessoal certamente irá postar.

Usando a estrutura do for, o IFS diz que o delimitador (split) é nada,
pode setar qualquer outra coisa diferente de espaço (faça o teste
removendo o IFS que você notará a diferença). Se você tivesse um
arquivo demilitado por ^, então poderia usar o IFS=^, isto faria o seu
read valer os campos passados, ex: read nome sobrenome, sendo que o
arquivo estaria assim: nome^sobrenome.

- --
IFS=""
for i in $(cat texto.txt);do
echo $i
done
- --

usando o ultil
- --
FLAG=false
until $FLAG;do
read || FLAG=true
    echo $REPLY
done < texto.txt
- --

Como pode ter visto na estrutura de loop, o ultil trabalhará assim:

enquanto for falso, faça
leia || (ou) se nao ler nada (read non zero) então recebe true para
finalizar o loop
imprime REPLY (variável default quando nao se define nada no while)
end


Um abraço

- --


/*---------------------------------------------------*/
/*    *    Flavio Torres - Administrador de Sistemas*/
/*   /_\   */int y,z;main(x){x=(x>0?-9:x);z=((z=(x+5)
/*  o. .o  */)>0?z:-z);printf(!x&&++y?"\n":z?z>y%3+y/
/*  ((Y))  */3?" ":x<-5?"/":"\\":y?"|":"*");y-9?main(
/* ()) (() */++x):puts("  _|_|_")&&puts("  \\___/");}
/*  ()^()  A party animal isn't just for Christmas.*/




- ------------------------------------

- ---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação,
como perl, C etc. Quem insistir em não seguir esta regra será moderado
sem prévio aviso.
- ---------------------------------------------------------------------
Sair da lista: address@hidden
- ---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
- ---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil

Links do Yahoo! Grupos



-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (MingW32)

iEYEARECAAYFAkq4JWcACgkQNRQApncg297RBwCdGiV+UQ+dmhfPzjWSg2TbZ5Ya
6UQAn0yRXy50Efx9tWITSTnMUxvZAeBv
=3i2v
-----END PGP SIGNATURE-----


reply via email to

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