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