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 17:21:36 -0300

No meu ksh não funciona. Ferramenta proprietária é fogo, cada um dá a sua
modificada para perder a compatibilidade...

Prompt>echo $SHELL
/bin/ksh
Prompt>var=6
Prompt>if /usr/bin/[ $var -gt 5 ; then
>   echo var maior que 5
>else
>   echo var menor ou igual a 5
>fi
Prompt>> > > > ksh: /usr/bin/[:  not found
var menor ou igual a 5

Este é o /bin/ksh do SVR4.

[ ]s,
Julio
:wq

| -----Mensagem original-----
| De: Rodolfo Villanova
| [mailto:address@hidden]
| Enviada em: quinta-feira, 3 de março de 2005 16:48
| Para: address@hidden
| Assunto: RES: [shell-script] O IF NÃO FUNCIONA PQ ?
| 
| 
| 
| Beleza, Julio!
| 
| Pois sob Korn-Shell funcionou da mesma forma!
| 
| Grato,
| -------
| Rodolfo
| 
| > -----Mensagem original-----
| > De: Julio Cezar Neves - DATAPREVRJ
| > [mailto:address@hidden]
| > Enviada em: quinta-feira, 3 de março de 2005 16:32
| > Para: address@hidden
| > Assunto: RES: [shell-script] O IF NÃO FUNCIONA PQ ?
| >
| >
| >
| > 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
| >
| >
| >
| >
| >
| >
| >
| >
| >
| > 
| ---------------------------------------------------------------------
| > 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
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| ---------------------------------------------------------------------
| 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]