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

[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




 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]