[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