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

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

Re: [shell-script] Re: Sintaxe do IF (usando ponto e vírgula)


From: Bruno Gunter Fricke
Subject: Re: [shell-script] Re: Sintaxe do IF (usando ponto e vírgula)
Date: Wed, 06 Jun 2007 11:51:02 -0300

Exatamente, isso que o Julio fica claro no exemplo:


[root@gunter ~]# if echo a ;then echo oi; fi
a
oi
[root@gunter ~]# if echo a ;echo b ;then echo oi; fi
a
b
oi
[root@gunter ~]# if echo a ;echo b ;then echo oi; else echo c;fi
a
b
oi
[root@gunter ~]# if echo a ;echo b ;then echo oi; else echo c; fi
a
b
oi
[root@gunter ~]# 

[]'s

Em Qua, 2007-06-06 às 11:35 -0300, Julio C. Neves escreveu:
> Fala Tiago,
> veja bem, o if testa cmds e o ponto-e-vírgula é para botar mais de um
> cmd na
> mesma linha (a linha do if). Neste caso, ambos os cmds serão testados,
> porém
> só o último surtirá efeito sobre o if. Isso me parace claro. Não
> podemos
> esquecer que o Shell foi feito com o propósito de resolver qq parada
> sem
> chiar. E é isso que ele está fazendo.
> 
> Abração,
> Julio
> :wq
> 
> Em 06/06/07, Tiago Barcellos Peczenyj <address@hidden>
> escreveu:
> >
> > uma coisa interessante:
> >
> > dentro de um diretorio eu tenho o arquivo b.c
> >
> > $ if test -f b.c ; then echo "arquivo" ; else echo "nao eh
> arquivo" ; fi
> > arquivo
> >
> > $ if test -f .. ; then echo "arquivo" ; else echo "nao eh arquivo" ;
> fi
> > nao eh arquivo
> >
> > ok, agora vamos colocar algo antes do then
> >
> > $ if test -f b.c ; echo "ola mundo" ; then echo "arquivo" ; else
> echo "nao
> > eh arquivo" ; fi
> > ola mundo
> > arquivo
> >
> > ora.. foi executado ! aparentemente não influenciou o resultado,
> mas...
> >
> > $ if test -f .. ; echo "ola mundo" ; then echo "arquivo" ; else echo
> "nao
> > eh arquivo" ; fi
> > ola mundo
> > arquivo
> >
> > OPA! O resultado foi alterado! Vejamos agora:
> >
> > $ if echo "ola mundo" ; test -f .. ; then echo "arquivo" ; else echo
> "nao
> > eh arquivo" ; fi
> > ola mundo
> > nao eh arquivo
> >
> > Agora ficou mais claro! quando temos mais de uma instrução no if,
> > separados
> > por ponto e virgula, é testado o retorno da condição pela variavel
> $? e,
> > ao
> > que parece, a ultima instrução é que define se o bloco then ou else
> será
> > executado. um echo sempre retorna $? como 0, então se vc fizer
> >
> > if [condições] ; echo "XXX" ;
> >
> > isso sempre será verdadeiro, pois o echo no final garante isso.
> >
> > Agora se tentamos fazer
> >
> > $ for i in 1 2 3 ; echo "XXX" ; do echo $i ; done
> > bash: syntax error near unexpected token `echo'
> >
> > Sinto dificuldade de ver alguma utilidade pratica de 'burlar' um if
> assim,
> > mas fica ai a dica.
> >
> > []s Tiago
> >
> > On 6/6/07, box_ferrari <address@hidden <boxferrari%
> 40gmail.com>>
> > wrote:
> > >
> > > --- Em address@hidden<shell-script%
> 40yahoogrupos.com.br>
> > <shell-script%40yahoogrupos.com.br>,
> > > "Tiago Barcellos Peczenyj"
> > > <tiago.peczenyj@...> escreveu
> > > >
> > > > ferrari
> > > >
> > > > o ponto e virgula serve para vc separar 2 instruções na mesma
> linha
> > > >
> > > > ls ; mv a b
> > > >
> > > > por exemplo, eu gosto de fazer
> > > >
> > > > if [ condição ] ; then
> > > > comandos
> > > > else
> > > > outros comandos
> > > > fi
> > > >
> > > > acho mais legível. perceba que o ; separa o if do then na mesma
> linha.
> > > >
> > > > é a forma como o if, o for, o while/until foram concebidos.
> > > >
> > > > []´s Tiago
> > >
> > > Tiago, muito obrigado pela luz.
> > >
> > > Desculpem-me pela dúvida tão básica, mas eu estava racionando pela
> > > lógica de algumas linguagens, como o pascal, que não reconhecem
> quebra
> > > de linha e exigem terminadores.
> > >
> > > Já li bastante sobre o shell script, mas nunca me ative ao fato
> que a
> > > sintaxe destes comandos exigia a quebra de linha. Eu estava
> > > raciocioando que se o script executa comandos em lote, e no shell
> cada
> > > comando ocupa uma linha, o if também deveria ocupar uma única
> linha,
> > > do if ao fi e que, neste caso, as quebras de linhas seriam
> ignoradas
> > > e substituídas por um terminador (o ;). Justamente ao contrário.
> > >
> > > Grato mesmo pela explicação.
> > >
> > >
> > >
> >
> > --
> > Tiago B Peczenyj
> > Linux User #405772
> >
> > # cd /pub
> > # more beer
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> > 
> >
> 
> -- 
> Abraços,
> Julio
> http://www.julioneves.com - Um livro sobre Bash completo e on-line
> :wq
> 
> [As partes desta mensagem que não continham texto foram removidas]
> 
> 
> 
> 
> 
>  


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



reply via email to

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