[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Dúvida em como usar o IF
From: |
Marcelo Beckmann |
Subject: |
Re: [shell-script] Dúvida em como usar o IF |
Date: |
Thu, 2 Sep 2004 00:05:49 -0300 |
On Wed, 1 Sep 2004 23:00:03 -0300, Vitor Yahoo! <address@hidden> wrote:
> Marcelo, valeu pelas dicas!!!
Opa, não tem de que, é sempre bom poder ajudar :)
> Só no caso do "or", eu queria fazer uma verificação mais ou menos assim:
>
> Algoritmizando: Se variavel for igual a 1 ou 2 ou 3 ou 4 faça algo.
>
> Ou seja, ao invés de fazer vários or or or or, só fazer assim:
>
> if [ variavel -eq 1 | 2 | 3 | 4 ]; then
Hmmm... nesse caso em especÃfico, checando por exatemente esses
valores ai, poderia ser feito algo do tipo:
if [ $variavel -ge 1 -a $variavel -le 4 ] ; then
-ge : maior ou igual
-le : menor ou igual
-a : operador AND
mas com outros valores, por exemplo, se fosse checar se a variavel tem
os valores 1, 10, 4 ou 8, por exemplo, ai essa abordagem não
funcionaria :(
> É porque eu vi isso em um Script, onde declava no inÃcio que era bash... mas
> estava nesta estrutura:
>
> if (variavel~/1|2|3|4) {
>
> Eu sou inexperiente em shell script, mas nunca vi o if com ( ... ) nesta
> linguagem . E esse exemplo que dei não funcionou... Já tentei várias
> variações e nada...
É, esse tipo de construção ai com bash eu nunca vi também.
Existe o csh (c shell), que pelo que ouvi falar tem muito a ver com C.
Talvez nele haja alguma construção desse tipo. Mas não posso afirmar
nada com certeza, não tenho experiência com csh.
Agora, usando a criatividade, podemos fazer algo parecido usando algum
comando auxiliar, me ocorre agora o grep.
Por exemplo, digamos que eu queira checar se a varÃavel VAR possui os
valores 2, 5, 6 ou 9, e caso tenha, faça algo:
if [ $(echo $VAR | egrep -c "(2|5|6|9)" ) -eq 1 ] ; then
vamos testar aqui pra ver se rola:
[23:51:47 marcelo@cadaver marcelo]$ VAR=1
[23:51:57 marcelo@cadaver marcelo]$ [ $(echo $VAR | egrep -c
"(2|5|6|9)" ) -eq 1 ] && echo "tem" || echo "nao tem"
nao tem
[23:52:29 marcelo@cadaver marcelo]$ VAR=2
[23:52:35 marcelo@cadaver marcelo]$ [ $(echo $VAR | egrep -c
"(2|5|6|9)" ) -eq 1 ] && echo "tem" || echo "nao tem"
tem
Hmmm, funcionou.
Só mudei um pouco a construção. Explicando:
egrep : equivalente ao "grep -e", testa por expressões regulares
"(2|5|6|9)" : expressão regular que "casa" com 2, 5, 6 ou 9
-c : opção do grep que retorna o número de ocorrências
-eq 1 : teste para checar se o grep me disse que encontrou 1
ocorrência da expressão regular
Ao invés do if, usei uma forma alternativa pro teste:
comando && executa se retornar verdadeiro || executa se retornar falso
Isso equivale a:
if [ $(comando) -eq 1 ]
then
executa se retornar verdadeiro
else
executa se retornar falso
fi
No nosso caso, o $(comando) vai nos tar o retorno do "egrep -c ..."
Se o grep encontrar o que estamos procurando, isso vai retornar 1,
caso contrário, vai retornar 0. Ai comparamos isso com o -eq 1, e
seguimos em frente.
>
> Mais uma vez, obrigado!
Opa, não tem de que :)
Apesar de você ter me enviado o email em particular, tomo a liberdade
de enviar cópia pra lista, para que o pessoal possa aproveitar as
elucubrações, blz? :)
[]s
Marcelo Beckmann
- Página web com Perl, LuÃs Fernando C. Talora, 2004/09/01
- ShellScript/Email, André Luiz, 2004/09/01
- Dúvida em como usar o IF, Vitor (Yahoo!), 2004/09/01
- substr, Vitor Yahoo!, 2004/09/02
- Re: [shell-script] substr, Fernando Lemes da Silva, 2004/09/02
- Re: [shell-script] substr, Vitor Yahoo!, 2004/09/02
Re: [shell-script] Dúvida em como usar o IF, Bruno Oliveira da Silva, 2004/09/01
RES: [shell-script] Dúvida em como usar o IF, Lynn Karllo, 2004/09/01
Re: [shell-script] Página web com Perl, Gustavo Jantsch, 2004/09/01