[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]
Re: [shell-script] Substituição com Sed, Tiago Barcellos Peczenyj, 2006/12/18