Perché il mio codice per il controllo di una connessione a Internet non riesce?


1

Sto cercando di modificare uno script in modo che verifichi una connessione Internet prima di eseguire il resto dei suoi comandi, ma il problema è che, indipendentemente da ciò che provo (online o meno), la risposta è sempre 0 Ho fornito il codice che ho trovato di seguito nella speranza che qualcuno potesse guardarlo e dare alcune idee su come risolvere la mia situazione. Ho provato diversi modi con lo stesso risultato. Posso fornire più informazioni sul codice o sul mio computer, se necessario, grazie.

[root @ MercadesBendz MyWirelessCard] # TEST = $ (ping -c 1 74.125.21.147) [$ TEST> / dev / null 2> & 1] && echo 1 || eco 0

0


Quale sistema operativo? Linux?
Moab,

Sì: Linux 4.4.8-300.fc23.x86_64 GNU / Linux
Purpe_Fedora

Risposte:


1

Il problema è che il risultato di pinc-c 1 74.125.21.147 non è un numero - è la stringa con il risultato - e quindi stai verificando se è nullo o no - ma non è mai nullo, perché riporterà a prescindere da un fallimento.

Ho giocato in giro, e l'ho leggermente modificato - è meno elegante, ma funziona per me:

 TEST=$(ping -c 1 74.125.21.14|wc -l);  [ $TEST -gt 5 2>&1 ] && echo 1 || echo 0

L'idea qui è che il test ora conta il numero di righe. 5 righe di risultati indicano un errore, 6 o più indica un passaggio. Puoi renderlo più robusto aumentando il numero di ping e il numero di righe che conti, il che può anche causare un certo livello di perdita di pacchetti.

Esistono altre alternative: ad esempio, invece di contare il numero di righe, puoi fare qualcosa come | coda -2 | testa -1 | taglia -f4 per ottenere il numero di pacchetti ricevuti.


Fantastico grazie per il consiglio. Ho provato il codice rivisto e ha funzionato davvero. Sì, non sto cercando l'elegante perché sta andando in una sceneggiatura personale per me. :) :)
Purpe_Fedora,

Ehi, dato che funziona, è possibile uscire dallo script se non c'è internet disponibile? Ho provato un metodo ma ha continuato a uscire dal mio script anche se avevo una connessione Internet? #Check internet availablity TEST=$(ping -c 1 74.125.21.14|wc -l) [ $TEST -gt 5 2>&1 ] || exit
Purpe_Fedora,

Piuttosto allora usa [$ TEST ... perché non convertirlo in un if [$ TEST -gt 5] con un'istruzione then e else? In alternativa, dividi lo script in 2 parti e chiama un secondo script anziché l'eco
davidgo

Beh, l'ho provato anche io, credo, in un'altra sceneggiatura:#Check internet availablity TEST=$(ping -c 1 74.125.21.14|wc -l) if [ $TEST -gt 5 2>&1 ] then sudo dnf install gcc kernel-devel binutils cpp glibc-devel glibc-headers isl kernel kernel-headers libmpc else echo "No Internet Connection Available! Installing RPMs manuely." arr=(*.rpm) for (( i=0; i<${#arr[@]}; i++ )); do echo " ${arr[$i]} " dnf -y install ${arr[$i]} done #exit is commented out because it always closed my script #exit fi;
Purpe_Fedora,

Si prega di pubblicare questo come un'altra domanda (e commentare con il collegamento) in modo che io possa aiutare ulteriormente, è difficile senza formattazione ed è davvero un problema diverso. Inoltre, puoi definire lo script - Stai cercando di eseguire tutto dalla riga di comando, o cosa vuoi dire con) exit è commentato perché ha sempre chiuso il mio script)
davidgo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.