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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Condicional and


From: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] Condicional and
Date: Wed, 20 Dec 2006 09:11:40 -0200

Ola

O comando test possui os operadores -o e -a para emular o or e and, mas ate
onde eu saiba só vale junto dos operadores de teste do comando (-e -f == !=
etc). quando vc usa [ ] no if vc esta chamando o comando test.

Veja uma lista completa aqui
http://aurelio.net/shell/canivete.html#test

entretanto vc pode usar o comando if junto com algum comando executavel e
este vai verificar o codigo de retorno $? do comando, se for diferente de
zero, sera acusado erro. é por isso que o if com o ping funciona. criei uma
pequena função para deixar mais legivel a questão:

#!/bin/bash
test_ip() { ping -c 1 ${1} >&- 2>&- ; return $? ; }

IPTESTEA=193.168.1.1
IPTESTEB=192.168.0.1

if test_ip ${IPTESTEA} || test_ip ${IPTESTEB} ; then
    echo "Responde pelo menos um"
else
    echo "Nenhum responde"
fi

Observe o operador ||, ele é um ou lógico. se o comando anterior retornar $?
diferente de zero, o segundo comando sera executado. A logica é: se o
primeiro ip estiver ok, o teste passa. se o primeiro não extiver ok, o
segundo sera testado. o resultado do segundo teste sera 'captado' pelo if e
ele faz o que deve fazer.

Quanto ao seu script, ele poderia ser estruturado assim:

#!/bin/bash
# função para testes
test_ip() { ping -c 1 ${1} >&- 2>&- ; return $? ; }

IPTESTEA=193.168.1.1
IPTESTEB=192.168.0.1

CONT=0
while : ; do
    # testa os dois ips
    if test_ip ${IPTESTEA} || test_ip ${IPTESTEB} ; then
        CONT=0
    else
        CONT=$((${CONT}+1))
    fi
    # se ambos os ips falharem umas 10 vezes, reboota tudo!
    case "${CONT}" in
    10)  echo "Boot => $(date)" >> /var/log/boot.log
         reboot ;;
    esac
    sleep 5
done

Um abraço


On 12/19/06, Marcilio Almeida de Moura <address@hidden> wrote:
>
>   Pessoal, tenho este Script ( que esta abaixo ) e gostaria de uma de
> voces, adicionar mais uma condição no if, ex:
>
> Tentei um teste desta forma mas deu certo, alguma sugestão ?
>
> IPTESTE=193.168.1.1
> IPTESTE2=192.168.0.1
>
> if [ ! ping -c 1 $IPTESTE ] -a [ ! ping -c 1 $IPTESTE2 ];then
> echo "Nenhum responde"
> else
> echo "Responde pelo menos um"
> fi
>
> A condição não foi realizada -a é um and, e o enredeço IPTESTE2 não exite
>
>
> #!/bin/sh
>
> IPTESTE=193.168.1.1
> CONT=0
> while :
> do
> if ! ping -c 1 $IPTESTE > /dev/null 2>&1 ; then
> CONT=$(($CONT+1))
> if [ $CONT = "10" ] ; then
> echo "Boot => `date`" >> /var/log/boot.log
> reboot
> fi
> else
> CONT=0
> fi
> sleep 5
> done
>
>
> __________________________________________________
> Fale com seus amigos de graça com o novo Yahoo! Messenger
> http://br.messenger.yahoo.com/
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Tiago B Peczenyj
Linux User #405772

# cd /pub
# more beer


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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