Vai dar true mesmo... Use && ou || (dependendo de cada caso) para evitar isso.
[]'s Bruno Gunter Em Qua, 2007-06-06 às 10:54 -0300, Tiago Barcellos Peczenyj 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 <[EMAIL PROTECTED]> wrote: > > > > --- Em shell-script@yahoogrupos.com.br<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] > > > > > > [As partes desta mensagem que não continham texto foram removidas]