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: Julio C. Neves
Subject: Re: [shell-script] Re: Sintaxe do IF (usando ponto e vírgula)
Date: Wed, 6 Jun 2007 11:35:08 -0300

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]



reply via email to

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