
Aprovechando el resaltado de sintaxis del editor de texto tendríamos algo así:

Mientras el comando CMD retorne un valor de salida de 0 o de éxito, se ejecutarán los comandos entre el do y el done, es decir el cuerpo del bucle.
¿y si queremos que se ejecute el bucle mientras no funcione correctamente un comando?

Vamos a ver algunos ejemplos simples de bucles while.
Ejemplo – Recibe datos de teclado
Habrá ocasiones en las que tengamos que recibir el mismo tipo de información por teclado del operador varias veces de forma indeterminada. Para ello, podemos utilizar un bucle while.
readData.sh
Mientras el usuario inserte datos por teclado, mostrarlos en pantalla y seguir solicitando datos. Por ejemplo, el nombre de un usuario.

Ayuda
- Para poder leer un dato de teclado utilizamos el comando read. Si no tienes muy claro como funciona, consulta la ayuda de read.

Solución propuesta

Patrón de código
Al final si analizamos el código, nos damos cuenta de que esta estructura la podemos repetir para solucionar distintos problemas realizando pequeños cambios.
Con esta estructura podemos solicitar un dato al usuario y realizar una operación con ese dato, repitiendo una y otra vez el procesos siempre que se cumpla una condición con el dato proporcionado.
Por ejemplo:

Ahora, supongamos que me piden que mientras el dato no sea igual a salir, sigamos solicitando datos y realizando acciones.


Podemos darle una vueltita al código para hacerlo, en parte, más comprensible para un humano

Es más, podriamos utilizar el código de retorno de la función como condicion en el bucle while

La función getData devolverá el código de retorno del último comando ejecutado, que en este caso es la comprobación de la condición del bucle.
Ejemplo – Comprobar requisito
Habrá ocasiones en las tengamos que esperar a que se cumpla un requisito concreto para poder continuar. Podemos dar la oportunidad al operador a que solucione el problema y volver a realizar la comprobación.
Al final, el while lo estamos utilizando como un comando if … then… fi que se repite mientras se cumpla la condición. Solo avanzaremos cuando la condición no se cumpla. De esta forma, podemos utilizar este patrón de código para asegurarnos de que una condición se da y dar opción a que se cumpla la condición.
readUser.sh
Solicitamos al operador que inserte el nombre de un usuario por teclado. Si el operador no inserta un nombre de usuario, volvemos a solicitar que inserte el nombre del usuario hasta que inserte un valor.
Ayuda
- Podemos ver este enunciado desde el punto de vista de las herramientas que tenemos para realizar sentencias iterativas. En este caso, el bucle while. Mientras no se inserte el nombre de un usuario, advertimos de la necesidad de que se inserte el nombre de un usuario y volvemos a solicitar nombre de usuario.
Solución propuesta

Esta solución está genial, se entiende bastante bien desde el punto de vista de un administrador de sistemas.
No obstante, podríamos darle una vuelta más y meter la condición como retorno de la función getData. Esto no es necesario!!! Mejor entender las cosas bien antes de dar pasos más avanzados

La solución sin utilizar funciones también está fenomenal, salvo por un pequeño detalle

La línea 5 y 8 realizan exactamente la misma operación. No hay mucho problema a la hora de escribirlas, pero si a la hora de mantener el código. Cualquier modificación de estas líneas, por ejemplo si queremos cambiar el texto que se muestra, hará que tengamos que modificar ambas. Si usamos funciones, solo tendremos que tocar en un punto.
Ejemplo – Comprobaciones periódicas
Habrá ocasiones en las que nos interese realizar comprobaciones periódicas sobre el sistema. Para ello tenemos la alternativa de programar una tarea que se ejecute cada cierto tiempo y así evitar que tener que utilizar un bucle dentro del script. No obstante, puede que esta opción o sea una alternativa viable y nos interese realizar las comprobaciones dentro de nuestro script.
Para ello, podemos utilizar un bucle while infinito que realice una serie de operaciones y después espere un tiempo para volver a realizar la operación.
Podemos salir de este tipo de bucles infinitos cuando se cumpla una condición que nos interese.

En el siguiente ejemplo, si no está lanzado firefox, lo lanza. Realiza comprobaciones cada 60 segundos 🙂

Dejar una respuesta