Visualizzazione dei risultati da 1 a 6 su 6

Discussione: script condizionale

  1. #1
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481

    script condizionale

    Ho una macchina con 2 schede di rete configurate su due reti diverse, il default gateway so che può essere uno solo (sbaglio??), io avrei bisogno però, di fare un ping attraverso la eth0, farne un altro attraverso la eth1 (sia eth0 che eth1 sono connesse ad una rete con un gateway funzionante) e in base allo stato delle due connessioni eseguire o meno un comando.

    Le cose sono quindi due:

    1. Si può fare un ping ad un host pubblico (tipo www.html.it) passando al comando ping un parametro che lo "obblighi" ad uscire con un gateway diverso da quello di default configurato in /etc/network/interfaces? O bisogna per forza cambiare momentaneamente il default gateway e fare il ping?
    2. Come posso stabilire, dal risultato del comando ping, se la connessione è funzionante o no?

    In pratica con questo script devo capire se le due connessioni sono entrambe funzionanti, o quale delle due funziona.

    Ho dato uno sguardo al comando sed ma...non ci ho capito nulla...sono troppo indietro...

    Grazie

  2. #2
    Utente di HTML.it L'avatar di untamed
    Registrato dal
    Sep 2004
    Messaggi
    830
    Il costrutto condizionale con un ping non è diverso dagli altri, puoi fare così

    codice:
    if ping -c 1 -w 2 ${REMOTE_MACHINE}
    then
          #### istruzioni
    else
          #### istruzioni
    fi
    "La fede in una missione divina è una delle tante forme di certezza che hanno afflitto la razza umana." - Bertrand Russell

  3. #3
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Originariamente inviato da untamed
    Il costrutto condizionale con un ping non è diverso dagli altri, puoi fare così

    codice:
    if ping -c 1 -w 2 ${REMOTE_MACHINE}
    then
          #### istruzioni
    else
          #### istruzioni
    fi
    ...non pensavo si potesse fare così...ping da come output del testo...come valuta la if il risultato?! Non è che i comandi della shell se eseguiti da uno script danno come risultato tipo true false come se fossero funzioni?!?!

    Per utilizzare un gateway diverso da quello di default nel comando ping, si può fare qualcosa? O occorre dare un comando preventivo che cambia il default gateway?

    Grazie mille per il tuo aiuto, se ho ben capito come funziona il risultato dei comandi è una svolta! Praticamente puoi fare quello che vuoi...io pensavo occorresse processare l'output con espressioni regolari per "leggere" il risultato...

  4. #4
    Utente di HTML.it L'avatar di untamed
    Registrato dal
    Sep 2004
    Messaggi
    830
    Viene valutato l'esito del ping, se va a buon fine ritorna 0, altrimenti ritorna un numero diverso da 0. A quel punto puoi impostare il gw, anche se non mi sembra una soluzione troppo elegante...
    "La fede in una missione divina è una delle tante forme di certezza che hanno afflitto la razza umana." - Bertrand Russell

  5. #5
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Originariamente inviato da untamed
    Viene valutato l'esito del ping, se va a buon fine ritorna 0, altrimenti ritorna un numero diverso da 0. A quel punto puoi impostare il gw, anche se non mi sembra una soluzione troppo elegante...
    Il problema del gateway è risolvibile con l'opzione -I ethn in cui specifico con quale interfaccia fare il ping.

    Ho eth0 con il default gateway definito ed eth1 in cui definisco SOLO l'ip-netmask-network-broadcast, tutto tranne il gateway insomma.

    Ho provato a fare un ping -I eth1 e funziona...anche se sinceramente non ho ben capito come fa a funzionare se non ho definito il gateway...infatti di tanto in tanto non funziona, forse ci mette troppo tempo a trovare da solo l'ip del router?!?! Indagherò.

    L'unica cosa "strana" è che come dici tu, se tutto funziona restituisce 0, quindi
    codice:
    if ping www.html.it then
       echo "non funzia"
    else
       echo "funzia"
    fi
    Invece funziona al contrario...nel senso...:
    codice:
    if ping www.html.it then
       echo "funzia"
    else
       echo "non funzia"
    fi
    ma la if non dovrebbe essere NON verificata in caso il ping restituisce 0?! Perchè se mi da 0 la if mi esegue le istruzioni dopo il then e non quelle dopo l'else?

  6. #6
    Utente di HTML.it L'avatar di untamed
    Registrato dal
    Sep 2004
    Messaggi
    830
    no, intendevo che l'exit code è 0, e in questo caso lo è se il ping va a buon fine.
    "La fede in una missione divina è una delle tante forme di certezza che hanno afflitto la razza umana." - Bertrand Russell

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.