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

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

RES: [shell-script] O IF NÃO FUNCIONA PQ ?


From: Rodolfo Villanova
Subject: RES: [shell-script] O IF NÃO FUNCIONA PQ ?
Date: Thu, 3 Mar 2005 16:09:29 -0300

Beleza, manos Gustavo e Julio Neves!

Realmente eu não conhecia essa "idiossincrasia" do comando test.

Só não gostei que, pelo menos no Unix OSF1 (True64), é preciso colocar o
caminho absoluto do binário pra ele executar corretamente, não aceitando
colocar somente o "abre-colchete" ( [ ) na expressão, mesmo que tenha
agregado ao PATH do ambiente o referido caminho. Do jeito testado abaixo,
ele verifica a sintaxe do "alias" do comando test:

$ cat TESTE
#!/bin/ksh
var=6
if [ $var -gt 5 ; then
   echo var maior que 5
else
   echo var menor ou igual a 5
fi
$ TESTE
TESTE[4]: test: ] missing
var menor ou igual a 5

1 abraço,
--------------------------
Rodolfo D. Gross Villanova

> -----Mensagem original-----
> De: address@hidden [mailto:address@hidden]
> Enviada em: quinta-feira, 3 de março de 2005 12:25
> Para: address@hidden
> Assunto: Re: [shell-script] O IF NÃO FUNCIONA PQ ?
>
> >>>>> On Thu, 3 Mar 2005 11:17:17 -0300, "Rodolfo Villanova"
> <address@hidden> said:
>
>   > Deve ter ocorrido um erro de digitação na linha do if; como
> já apontando por
>   > outros na lista, a sintaxe correta para teste é abrir e
> fechar colchetes:
>   > [ ... ]. Troque o "fecha-chaves" ( } ) pelo "fecha-colchete" ( ] ).
>
> Na verdade, não se trata realmente de sintaxe.  Mas esse problema é
> tão comum que vale a pena tentar melhor.
>
> O 'if' da Bourne Shell (e, por extensão, o da bash e da ksh, entre
> outras) não testa expressões diretamente, mas sim o resultado de uma
> lista de comandos.  A sintaxe é a seguinte (tirado do comando 'help
> if' na bash):
>
>       if: if COMMANDS; then COMMANDS; [ elif COMMANDS; then
> COMMANDS; ]... [ else COMMANDS; ] fi
>           The if COMMANDS are executed.  If the exit status is
> zero, then the then
>           COMMANDS are executed.  Otherwise, each of the elif
> COMMANDS are executed
>           in turn, and if the exit status is zero, the
> corresponding then COMMANDS
>           are executed and the if command completes.  Otherwise,
> the else COMMANDS
>           are executed, if present.  The exit status is the exit
> status of the last
>           command executed, or zero if no condition tested true.
>
> Portanto, podemos fazer coisas interessantes do seguinte tipo:
>
>       if grep -q meunome *.txt
>       then echo achei
>       else echo não achei
>       fi
>
> Note que o if testa o resultado do comando grep.
>
> O tal colchete ([) que vemos normalmente depois de um if não é um
> elemento sintático, mas simplesmente um alias do comando 'test'.
> Veja:
>
>       $ type -a [
>       [ is a shell builtin
>       [ is /usr/bin/[
>
> Ooops.  A bash implementa o '[' como uma builtin pra otimizar, mas
> note que além da builtin existe um arquivo executável no meu path com
> o nome '/usr/bin/['.  Vejamos:
>
>       $ ls -l /usr/bin/[
>       -rwxr-xr-x  1 root root 23928 2004-07-16 08:37 /usr/bin/[
>
> Em algums outros UNIXes (eu estou num Linux) o /usr/bin/[ é um link
> simbólico para o comando /usr/bin/test.
>
> Experimente um 'man [' pra ver mais sobre isso.
>
> E lembre-se que o if testa comandos, o que abre todo um leque de
> possibilidades interessantes.
>
> Gustavo




reply via email to

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