GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo repetir un comando hasta que tenga éxito en Linux

En esta breve guía, vamos a aprender cómo repetir un comando hasta que tenga éxito en Linux. Esto puede ser útil en muchas ocasiones. Por ejemplo, puede usar este método para verificar la conectividad de red entre dos o más hosts o verificar la conectividad de Internet para ver si todavía está en línea o fuera de línea. Entonces, sea cual sea el motivo, si alguna vez quiso repetir un comando o programa de Linux hasta que finalice con éxito, esta guía lo ayudará.

Repita el comando hasta que tenga éxito en Linux

Para la ejecución repetitiva de una lista de comandos, usamos las siguientes construcciones de bucle BASH :

  1. Mientras bucle,
  2. Hasta bucle.

Mientras Bucle ejecuta el bloque de código (incluido dentro de do ... done ) cuando la condición es verdadera y sigue ejecutándolo hasta que la condición se vuelve falsa . Una vez que la condición se vuelve falsa , el bucle while finaliza.

Hasta Bucle es justo lo contrario del bucle While. Ejecuta el bloque de código (incluido dentro de do ... done ) cuando la condición es falsa y seguir ejecutándolo hasta que la condición se vuelva verdadera . Una vez que la condición se vuelve verdadera , el bucle hasta que finaliza.

Primero, veamos cómo repetir un comando de Linux o un programa hasta que tenga éxito usando el bucle While.

1. Repita un comando hasta que tenga éxito usando el ciclo While

Eche un vistazo al siguiente comando:

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

Este comando seguirá intentando hacer ping al sitio ostechnix.com. Una vez que el sitio esté en línea, el ciclo Mientras terminará y mostrará "xcalc" programa. Aquí, xcalc es opcional. Es solo para fines de notificación. De lo contrario, es posible que debamos seguir revisando la ventana de la Terminal para verificar si el comando se ejecutó correctamente o no.

Explicación:

Analicemos el comando anterior y veamos qué hace cada instrucción.

while ! ping -c 3 ostechnix.com ;

Esta es la declaración condicional. Como puede ver en esta declaración, antecedemos el comando ping con ! personaje. Sirve como "NOT" condición. Entonces, el significado real de la línea anterior es:mientras NO pueda hacer ping a ostechnix.com .

do sleep 2 ; done ;

La afirmación "duerme 2" , indica que no golpee el sistema intentando repetidamente el comando ping cada segundo. Le indicamos al sistema que espere un poco, por ejemplo, 2 segundos, y luego intente hacer ping a ostechnix.com. En otras palabras, el comando Mientras seguirá haciendo ping al sitio cada 2 segundos. Una vez que la condición se vuelve falsa, el ciclo while terminará.

xcalc ;

Ejecute el programa xcalc. Este programa se ejecutará solo después de la ejecución exitosa del comando anterior.

Entonces, según el comando anterior, si la condición es verdadera (es decir, si ostechnix.com "NO" es accesible), ejecutará el bloque de código incluido en do...done . Aquí, el código es "dormir 2". Así que espera 2 segundos y luego vuelve a intentar hacer ping al sitio. Seguirá ejecutándose hasta que la condición se vuelva falsa. Una vez que la condición se vuelve falsa (es decir, si se puede acceder a ostechnix.com), el ciclo terminará y finalmente se abrirá el programa xcalc.

Este es el resultado de muestra del comando anterior:

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. Repita un comando hasta que tenga éxito usando el bucle Hasta

También puede hacer esto usando el bucle "Hasta" como se muestra a continuación.

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

Analicemos este comando y veamos qué hace cada declaración:

until ping -c 3 ostechnix.com ;

Esta es la declaración condicional. Significa:hacer ping hasta que se pueda acceder al sitio.

do sleep 2 ; done ;

Intente hacer ping al sitio cada 2 segundos hasta que sea accesible. Una vez que la condición se vuelve verdadera, es decir, se puede acceder al sitio, el bucle finalizará.

xcalc

Ejecute el programa xcalc. Solo se ejecutará tras la ejecución exitosa de los comandos anteriores.

Entonces, según el comando anterior, el ciclo Hasta seguirá haciendo ping a ostechnix.com hasta que tenga éxito. Una vez que se pueda acceder al sitio, el ciclo hasta finalizará y se abrirá el programa xcalc.

Lectura relacionada:

  • Cómo ejecutar un comando de Linux cada X segundos para siempre

3. Repita el comando anterior hasta que tenga éxito

Ahora sabemos cómo ejecutar un comando de Linux hasta que se cierra con éxito. ¿Qué pasa con el comando anterior? ¿Cómo repite o vuelve a intentar los comandos anteriores hasta que tenga éxito? ¡Eso también es fácil!

Ya hemos publicado diferentes formas de repetir el último comando. Si no sabe cómo hacerlo, consulte la siguiente guía.

  • Diferentes formas de repetir su último comando en Linux

Como se indica en el enlace anterior, para ejecutar cualquier último comando ejecutado, simplemente escriba dobles signos de exclamación y presione ENTER como se muestra a continuación:

$ !!

Esto ejecutará el último comando.

Entonces, si desea repetir los comandos anteriores hasta que tengan éxito usando el ciclo While, ejecute:

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

Para repetir los comandos anteriores hasta que tengan éxito usando el bucle Hasta, ejecute:

$ until !!; do :; done

Para obtener más ejemplos sobre el ciclo Bash While y el ciclo Until, consulte la siguiente guía:

  • Secuencias de comandos de Bash:ciclo while y till explicado con ejemplos

Linux
  1. Cómo ejecutar o repetir un comando de Linux cada X segundos para siempre

  2. Cómo cambiar el nombre de los archivos en Linux

  3. Ejemplos de comandos ping en Linux

  4. Repita el comando automáticamente en Linux

  5. ¿Cómo hacer ping en Linux hasta que se conozca el host?

Comando ping en Linux

Cómo usar du Command en Linux

Cómo crear un alias en Linux

Cómo instalar y usar el comando Ping en Linux

Ejemplos de comandos ping de Linux

Comando ping de Linux