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 <[EMAIL PROTECTED]> wrote: > > --- Em [email protected]<shell-script%40yahoogrupos.com.br>, > "Tiago Barcellos Peczenyj" > <[EMAIL PROTECTED]> 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]
