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

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

RES: [shell-script] loop while


From: Julio Cezar Neves - DATAPREVRJ
Subject: RES: [shell-script] loop while
Date: Tue, 9 Nov 2004 11:50:02 -0300

Fala Celso,
o seu erro está no cmd if. O if não testa condição, testa comandos. Para
testar condições existe o cmd test e então o seu script ficaria assim:

| while read x
| do
|    if test $x = linha2 then
|       varX="mais"
|    fi
| 
|    if test $x = linha5 then
|        varY="nada"
|    fi
| done < arq.txt

Desta forma já funciona pq o if estaria testando o cmd test, mas para
alegria geral da nação, este cmd pode ser representado por um par de
"cochetas", ficando assim:

| while read x
| do
|    if [ $x = linha2 ] then
|       varX="mais"
|    fi
| 
|    if [ $x = linha5 ] then
|        varY="nada"
|    fi
| done < arq.txt

Que aumenta enormemente a legibilidade. A sintaxe exige que tenha espaços em
brancos entre todos so componentes do test.

[ ]s,
Julio Cezar Neves
- Gerente do Programa de Software Livre -
Tel:+55 21 2528-7070 / +55 21 8112-9988
Fax: +55 21 2528-7646
mailto:address@hidden


| -----Mensagem original-----
| De: Celso Vianna [mailto:address@hidden]
| Enviada em: segunda-feira, 8 de novembro de 2004 22:45
| Para: address@hidden
| Assunto: Re: [shell-script] loop while
| 
| 
| 
| Julio,
| 
| E ae, tudo tranquilo? eu fiz assim....
| 
| cat arq.txt
| linha1
| linha2
| linha3
| linha4
| linha5
| 
| while read x
| do
|    if $x=linha2 then
|       varX="mais"
|    fi
| 
|    if $x=linha5 then
|        varY="nada"
|    fi
| done < arq.txt
| 
| O problema é que qdo termina o loop as variáveis não tem 
| nada; detalhe:
| estou usando FreeBSD/bash
| 
| Celso
| 
| ----- Original Message -----
| From: "Julio Cezar Neves - DATAPREVRJ" 
| <address@hidden>
| To: <address@hidden>
| Sent: Monday, November 08, 2004 11:29 AM
| Subject: RES: [shell-script] loop while
| 
| 
| 
| Celso,
| acho que vc se confundiu um pouco. Existem duas formas de 
| fazer o que vc
| quer:
| 
| Primeira:
| cat arq.txt | while read x
| do
|    varX=blabla
| done
| 
| Segunda:
| while read x
| do
|    varX=blabla
| done < arq.txt
| 
| Na primeira, o pipe que redireciona o cat forçará o 
| processamento do while
| em um subshell e desta forma qdo o cmd encerrar-se, todos o 
| ambiente gerado
| dentro deste subshell estará perdido.
| 
| Na segunda, não será criado nenhum subshell e portanto não 
| haverá nada a se
| perder. Veja os 2 exemplos abaixo feitos direto no prompt:
| 
| Prompt> seq 5 > num
| Prompt> cat num
| 1
| 2
| 3
| 4
| 5
| Prompt> cont=0
| Prompt> cat num | while read x
| > do
| >     let cont++
| > done
| Prompt> echo $cont
| 0
| Prompt> while read x
| > do
| >     let cont++
| > done < num
| Prompt> echo $cont
| 5
| 
| [ ]s,
| Julio Cezar Neves
| - Gerente do Programa de Software Livre -
| Tel:+55 21 2528-7070 / +55 21 8112-9988
| Fax: +55 21 2528-7646
| mailto:address@hidden
| 
| 
| | -----Mensagem original-----
| | De: Celso Vianna [mailto:address@hidden]
| | Enviada em: domingo, 7 de novembro de 2004 21:23
| | Para: address@hidden
| | Assunto: [shell-script] loop while
| |
| |
| |
| | Pessoal,
| |
| | Tenho o seguinte arquivo:
| |
| | cat arq.txt
| |
| | linha1
| | linha2
| | linha3
| | linha4
| | linha5
| |
| | while read x
| | do
| |    varX=blabla
| | done < arq.txt
| |
| | como é que faria para, em cada passagem do loop, atribuir um valor à
| | variável "varX"?
| |
| | Celso
| |
| |
| |
| | 
| ---------------------------------------------------------------------
| | 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
| ---------------------------------------------------------------------
| 
| Links do Yahoo! Grupos
| 
| 
| 
| 
| 
| 
| 
| 
| 
| ---------------------------------------------------------------------
| 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
| ---------------------------------------------------------------------
| 
| Links do Yahoo! Grupos
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| ---------------------------------------------------------------------
| 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
---------------------------------------------------------------------
 
Links do Yahoo! Grupos




 




reply via email to

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