GNU/Linux >> Linux Esercitazione >  >> Linux

Come ripetere un comando finché non ha successo in Linux

In questa breve guida, impareremo come ripetere un comando fino a quando non avrà successo in Linux. Questo può essere utile in molte occasioni. Ad esempio, puoi utilizzare questo metodo per verificare la connettività di rete tra due o più host o controllare la connettività Internet per vedere se sei ancora online o offline. Quindi, qualunque sia il motivo, se hai mai voluto ripetere un comando o un programma Linux fino a quando non si conclude con successo, questa guida ti aiuterà.

Ripeti il ​​comando finché non riesce in Linux

Per l'esecuzione ripetitiva di un elenco di comandi, utilizziamo i seguenti costrutti di loop BASH :

  1. Durante il ciclo,
  2. Fino al ciclo.

Durante il ciclo esegue il blocco di codice (racchiuso all'interno di do ... done ) quando la condizione è vera e continua a eseguirlo finché la condizione non diventa falsa . Quando la condizione diventa falsa , il ciclo while è terminato.

Fino al ciclo è esattamente l'opposto del ciclo While. Esegue il blocco di codice (racchiuso all'interno di do ... done ) quando la condizione è falsa e continua a eseguirlo finché la condizione non diventa vera . Quando la condizione diventa vera , il ciclo fino al termine.

Per prima cosa, vediamo come ripetere un comando o un programma Linux finché non riesce utilizzando il ciclo While.

1. Ripeti un comando finché non riesce usando il ciclo While

Dai un'occhiata al seguente comando:

$ while ! ping -c 3 ostechnix.com ; do sleep 2 ; done ; xcalc

Questo comando continuerà a provare a eseguire il ping del sito ostechnix.com. Una volta che il sito è online, il ciclo While terminerà e visualizzerà "xcalc" programma. Qui, xcalc è facoltativo. È solo a scopo di notifica. In caso contrario, potrebbe essere necessario continuare a controllare la finestra del Terminale per verificare se il comando è riuscito o meno.

Spiegazione:

Analizziamo il comando precedente e vediamo cosa fa ogni istruzione.

while ! ping -c 3 ostechnix.com ;

Questa è l'istruzione condizionale. Come puoi vedere in questa dichiarazione, abbiamo preceduto il comando ping con ! carattere. Serve come "NON" condizione. Quindi il vero significato della riga sopra è - mentre NON è in grado di eseguire il ping di ostechnix.com .

do sleep 2 ; done ;

L'affermazione "dormire 2" , indica che non martellano il sistema provando ripetutamente il comando ping ogni secondo. Indichiamo al sistema di attendere un po', ad esempio 2 secondi, quindi proviamo a eseguire il ping di ostechnix.com. In altre parole, il comando While continuerà a eseguire il ping del sito ogni 2 secondi. Una volta che la condizione diventa falsa, il ciclo while terminerà.

xcalc ;

Esegui il programma xcalc. Questo programma verrà eseguito solo dopo la corretta esecuzione del comando precedente.

Quindi, come per il comando precedente, se la condizione è vera (cioè se ostechnix.com è "NON" raggiungibile), eseguirà il blocco di codice racchiuso in do...done . Qui, il codice è "sleep 2". Quindi attende 2 secondi e poi riprova a eseguire il ping del sito. Continuerà a eseguirlo finché la condizione non diventa falsa. Una volta che la condizione diventa falsa (cioè se ostechnix.com è raggiungibile), il ciclo terminerà e infine si aprirà il programma xcalc.

Ecco l'output di esempio del comando precedente:

ping: ostechnix.com: Name or service not known
ping: ostechnix.com: Name or service not known
ping: ostechnix.com: Name or service not known
ping: ostechnix.com: Name or service not known
ping: ostechnix.com: Name or service not known
ping: ostechnix.com: Name or service not known
ping: ostechnix.com: Name or service not known
ping: ostechnix.com: Name or service not known
ping: ostechnix.com: Name or service not known
ping: ostechnix.com: Name or service not known
ping: ostechnix.com: Name or service not known
ping: ostechnix.com: Name or service not known
PING ostechnix.com (104.26.5.40) 56(84) bytes of data.
64 bytes from 104.26.5.40 (104.26.5.40): icmp_seq=1 ttl=55 time=63.6 ms
64 bytes from 104.26.5.40 (104.26.5.40): icmp_seq=2 ttl=55 time=84.8 ms
64 bytes from 104.26.5.40 (104.26.5.40): icmp_seq=3 ttl=55 time=79.9 ms

--- ostechnix.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 63.602/76.114/84.810/9.068 ms
Warning: Cannot convert string "-adobe-symbol-*-*-*-*-*-120-*-*-*-*-*-*" to type FontStruct

2. Ripetere un comando finché non riesce utilizzando il ciclo Fino

Puoi anche farlo usando il ciclo "Fino a" come di seguito.

$ until ping -c 3 ostechnix.com ; do sleep 2 ; done ; xcalc

Analizziamo questo comando e vediamo cosa fa ogni istruzione:

until ping -c 3 ostechnix.com ;

Questa è l'istruzione condizionale. Significa - ping finché il sito non è raggiungibile.

do sleep 2 ; done ;

Prova a eseguire il ping del sito ogni 2 secondi finché non è raggiungibile. Una volta che la condizione diventa vera, ovvero il sito è raggiungibile, il ciclo verrà terminato.

xcalc

Esegui il programma xcalc. Verrà eseguito solo dopo l'esecuzione corretta dei comandi precedenti.

Quindi, come per il comando precedente, il ciclo Until continuerà a eseguire il ping di ostechnix.com fino a quando non avrà esito positivo. Una volta che il sito sarà raggiungibile, il ciclo fino a terminerà e si aprirà il programma xcalc.

Lettura correlata:

  • Come eseguire un comando Linux ogni X secondi per sempre

3. Ripetere il comando precedente finché non riesce

Ora sappiamo come eseguire un comando Linux fino a quando non esce correttamente. E il comando precedente? Come ripeti o riprova i comandi precedenti finché non hanno esito positivo? Anche questo è facile!

Abbiamo già pubblicato diversi modi per ripetere l'ultimo comando. Se non sai come farlo, consulta la seguente guida.

  • Diversi modi per ripetere l'ultimo comando in Linux

Come indicato nel link sopra, per eseguire l'ultimo comando eseguito, è sufficiente digitare doppi punti esclamativi e premi INVIO come di seguito:

$ !!

Questo eseguirà l'ultimo comando.

Quindi, se vuoi ripetere i comandi precedenti finché non hanno esito positivo utilizzando il ciclo While, esegui:

$ !!; while [ $? -ne 0 ]; do !!; done

Per ripetere i comandi precedenti finché non hanno esito positivo utilizzando il ciclo Fino, esegui:

$ until !!; do :; done

Per ulteriori esempi su Bash While loop e Until loop, fai riferimento alla seguente guida:

  • Scripting Bash - Spiegazione del ciclo While e Until con esempi

Linux
  1. Come eseguire o ripetere un comando Linux ogni X secondi per sempre

  2. Come rinominare i file in Linux

  3. Come usare il comando Su in Linux

  4. Come creare uno script di un comando Linux

  5. Come installare e utilizzare il comando Ping in Linux

Comando Ping in Linux

Come usare du Command in Linux

Come creare un alias in Linux

Come installare e utilizzare il comando Ping in Linux

Esempi di comandi ping Linux

comando ping di Linux