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: Julio Cezar Neves - DATAPREVRJ
Subject: RES: [shell-script] O IF NÃO FUNCIONA PQ ?
Date: Thu, 3 Mar 2005 16:31:49 -0300

Poizé Tchê,
foi exatamente o que eu disse. No Bash tb é necessário o caminho completo.
Para o teu exemplo funcionar no Bash é necessário a seguinte sintaxe:

var=6
if /usr/bin/[ $var -gt 5 ; then
   echo var maior que 5
else
   echo var menor ou igual a 5
fi

[ ]s,
Julio
:wq

| -----Mensagem original-----
| De: Rodolfo Villanova
| [mailto:address@hidden]
| Enviada em: quinta-feira, 3 de março de 2005 16:09
| Para: address@hidden
| Assunto: RES: [shell-script] O IF NÃO FUNCIONA PQ ?
| 
| 
| 
| 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
| 
| 
| 
| 
| ---------------------------------------------------------------------
| Esta lista não admite a abordagem de outras liguagens de 
| programação, como perl, C etc. Quem insistir em não seguir 
| esta regra será moderado sem prévio aviso.
| ---------------------------------------------------------------------
| Sair da lista: address@hidden
| ---------------------------------------------------------------------
| Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
 
Links do Yahoo! Grupos




 




reply via email to

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