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: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] Re: Sintaxe do IF (usando ponto e vírgula)
Date: Wed, 6 Jun 2007 10:54:22 -0300

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> wrote:
>
>   --- Em address@hidden<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]



reply via email to

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