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 <[EMAIL PROTECTED]> 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]
