Las secuencias de comandos de Shell, específicamente las secuencias de comandos de Bash, son una excelente manera de automatizar tareas repetitivas o tediosas en sus sistemas. ¿Por qué escribir cuando puede programar y ejecutar scripts con manos libres? Una de las muchas construcciones de secuencias de comandos es el bucle. Un bucle es una sección de código que recoge datos o genera datos y luego realiza alguna operación en los datos y luego comienza el proceso nuevamente hasta que se cumple alguna condición, el script se interrumpe o cuando se agotan los datos de entrada. Cuando utiliza secuencias de comandos de Bash, a veces es útil realizar acciones mediante algún tipo de bucle.
[ A los lectores también les gustó: Cinco formas de usar operadores de redireccionamiento en bash ]
Los comandos de bucle básicos en los scripts de Bash son for
y while
.
for
los bucles se utilizan normalmente cuando tiene una lista finita conocida, como una serie de números, una lista de elementos o contadores.while
los bucles se pueden usar con listas, pero también son útiles para condiciones que no tener un límite conocido. Puede usarlo para ejecutar comandos mientras una condición es verdadera (o invierta la lógica y ejecútela mientras la condición es falsa).
Entonces, aunque (juego de palabras) hay diferentes formas de realizar bucles, en este artículo, me enfoco en ejemplos usando while
bucles.
1. Un ciclo while simple
Imagine que está instalando una aplicación enorme y le preocupa que eventualmente use demasiado espacio en el sistema de archivos.
En lugar de ejecutar df
en una terminal separada, puede ejecutar un comando simple para monitorear la utilización del disco cada segundo. Esto te permite interrumpir el proceso de instalación si ves que llegará a ese límite.
while true
do
df -k | grep home
sleep 1
done
En este caso, está ejecutando el ciclo con un verdadero condición, lo que significa que se ejecutará para siempre o hasta que presione CTRL-C. Por lo tanto, debe vigilarlo (de lo contrario, seguirá utilizando los recursos del sistema).
Nota :si usa un ciclo como este, debe incluir un comando como sleep
para darle al sistema algo de tiempo para respirar entre ejecuciones. Ejecutar cualquier cosa sin parar podría convertirse en un problema de rendimiento, especialmente si los comandos dentro del ciclo involucran operaciones de E/S.
2. Esperando a que una condición se haga realidad
Hay variaciones de este escenario. Por ejemplo, sabe que en algún momento el proceso creará un directorio y solo está esperando ese momento para realizar otras validaciones.
Puedes tener un while
bucle para seguir comprobando la existencia de ese directorio y solo escribir un mensaje mientras el directorio no existe.
Si desea hacer algo más elaborado, puede crear un script y mostrar una indicación más clara de que la condición del bucle se hizo realidad:
#!/bin/bash
while [ ! -d directory_expected ]
do
echo "`date` - Still waiting"
sleep 1
done
echo "DIRECTORY IS THERE!!!"
3. Usar un bucle while para manipular un archivo
Otra aplicación útil de un while
loop es combinarlo con el read
comando para tener acceso a columnas (o campos) rápidamente desde un archivo de texto y realizar algunas acciones sobre ellos.
En el siguiente ejemplo, simplemente selecciona las columnas de un archivo de texto con un formato predecible e imprime los valores que desea usar para completar un /etc/hosts
archivo.
Aquí se supone que el archivo tiene columnas delimitadas por espacios o tabuladores y que hay no espacios en el contenido de las columnas. Eso podría cambiar el contenido de los campos y no brindarle lo que necesita.
Tenga en cuenta que solo está realizando una operación simple para extraer y manipular información y que no le preocupa la reutilización del comando. Clasificaría esto como uno de esos "trucos rápidos y sucios".
Por supuesto, si esto fuera algo que haría repetidamente, debería ejecutarlo desde un script, usar nombres propios para las variables y todas esas buenas prácticas (incluida la transformación del nombre de archivo en un argumento y definir dónde enviar la salida, pero hoy, el tema es while
bucles).
#!/bin/bash
cat servers.txt | grep -v CPU | while read servername cpu ram ip
do
echo $ip $servername
done
[ Aprenda los aspectos básicos del uso de Kubernetes en esta hoja de trucos gratuita. ]
Resumir
while
los bucles son útiles en secuencias de comandos que dependen de que una determinada condición sea verdadera o falsa, pero también puede usarlos de forma interactiva para controlar alguna condición.
Las cosas importantes a recordar son:
Siempre tenga claro cuál es la condición para terminar el lazo. Si eso es algo que esperas hacer tú mismo con un CTRL-C , luego vigile su comando. Piensa en qué tan rápido desea que se repita cada ciclo de bucle. Si realiza alguna operación que involucre E/S dentro del ciclo, se convierte en un aspecto crítico de la planificación.
Con eso en mente, diviértete while
tú puedes.