[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RES: [shell-script] while e if
From: |
Julio Cezar Neves - DATAPREVRJ |
Subject: |
RES: [shell-script] while e if |
Date: |
Mon, 28 Mar 2005 19:58:50 -0300 |
Fala Rodrigo,
a sua duvida nao e qto ao if e sim qto ao test. O if simplesmente testa
instrucoes e a instrucao test faz comparacoes, entao uma construcao do tipo
if test ... (que e similar a if [ ... ]) testa comparacoes.
Para confirmar o que te disse, repare o cmd a seguir:
Prompt> ls -l /usr/bin/[
lrwxrwxrwx 1 root root 4 Dec 29 2003 /usr/bin/[ -> test
Veja tb que a construcao, aparentemente maluca, a seguir funciona:
Prompt> var=2
Prompt> /usr/bin/[ $var -eq 2 && echo var igual a dois
var igual a dois
Ora se uma e link da outra, entao:
Prompt> var=2
Prompt> test $var -eq 2 && echo var igual a dois
var igual a dois
ou:
Prompt> var=2
Prompt> [ $var -eq 2 ] && echo var igual a dois
var igual a dois
Bem a esta altura vc deve ter visto que o if e o while nao tem nada com
isso, eles simplesmente testam instrucoes.
Entao vamos ao teste: se vc quiser aceitar um numero compreendido entre 1 e
10 faca:
Prompt> [ $var -ge 1 -a $var -le 10 ] && echo var legal
var legal
Como vc viu, a opcao -a foi usada para significar and (e). Mas se vc insiste
em usar o && para significar and, faca assim:
Prompt> [[ $var -ge 1 && $var -le 10 ]] && echo var legal
var legal
Ahhh, mais uma coisa! O && que usei antes do echo foi para usar uma
propriedade do Shell (e de todas as linguagens) que para efeito de
otimizacao de execucao se vc tem dois cmds ligados por um and (&&) e o
primeiro for verdadeiro, o segundo sera executado, caso o primeiro seja
falso o segundo nunca sera executado pois sabemos que qdo temos um conector
and e o primeiro for falso, nao e necessario testar o segundo pq sera sempre
falso.
Isso te permite criar constucoes da seguinte forma:
Prompt> cd dir || mkdir dir
Isto e, caso o cd nao seja bem sucedido, o diretorio dir sera criado. Mas
para ficar mais legal isso deveria ser feito da seguinte maneira:
Prompt> cd dir 2> /dev/null || { mkdir dir; cd dir; }
ou usando o if (sem o test)
if cd dir 2> /dev/null; then
:
else
mkdir dir
cd dir
fi
ou usando o test:
if [ -d dir ]; then
cd dir
else
mkdir dir
cd dir
fi
ou, melhor ainda:
if [ ! -d dir ]; then
mkdir dir
fi
cd dir
Ou ainda sem o if:
[ ! -d dir ] && mkdir dir
cd dir
Ou:
[ -d dir ] || mkdir dir
cd dir
[ ]s,
Julio
:wq
| -----Mensagem original-----
| De: Rodrigo Monteiro [mailto:address@hidden]
| Enviada em: segunda-feira, 28 de marco de 2005 13:57
| Para: address@hidden
| Assunto: [shell-script] while e if
|
|
|
| estou com duvidas com o while e if, tipo as
| comparacoes como || && (e/ou), como uso eles, por
| exemplo:
| if [ $teste <= 100 || $outro > 100 ] ; then
| while [ $teste <= 100 && $outro > 100 ]
| ajudas serao bem-vindas, ou entao algum site,
| mini-howto etc.
|
|
|
| __________________________________
| Do you Yahoo!?
| Yahoo! Small Business - Try our new resources site!
| http://smallbusiness.yahoo.com/resources/
|
|
| ---------------------------------------------------------------------
| Esta lista nao admite a abordagem de outras liguagens de
| programacao, como perl, C etc. Quem insistir em nao seguir
| esta regra sera moderado sem previo aviso.
| ---------------------------------------------------------------------
| Sair da lista: address@hidden
| ---------------------------------------------------------------------
| Esta lista e moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Links do Yahoo! Grupos