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

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

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


From: Carlão Moraes
Subject: RE: RES: [shell-script] O IF NÃO FUNCIONA PQ ?
Date: Fri, 04 Mar 2005 12:56:06 +0000

Galera,

A sintaxe do comando IF está incorreta, a sintaxe correta é:

IF [ (expressão lógica) ]; THEN

FI




----------------------------------
Carlão Moraes - programador
address@hidden




From: Julio Cezar Neves - DATAPREVRJ <address@hidden>
Reply-To: address@hidden
To: address@hidden
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]