Bash Loops en profundidad

Bash Loops en profundidad
Un bucle consta de uno o más comandos que se ejecutan repetidamente hasta que se cumpla una condición. Para que esto suceda, los comandos deben estar en una construcción. La construcción y sus comandos forman un comando compuesto. Un comando bash sale con cero si no hubo problema. Por otro lado, sale con un número mayor que cero si había un problema o un problema. El estado de salida de un comando compuesto es el de su último comando.

Para comprender este artículo, el lector ya debe conocer los comandos bash simples. Se explica cualquier comando bash no simple utilizado en este artículo. No olvide que los comandos bash se pueden escribir en un archivo de texto, y el archivo de texto puede ejecutarse escribiendo el nombre del archivo (precedido por ruta) en el terminal, luego presionando Enter. No olvide permitirse ejecutar el archivo con algo como:

sudo chmod +x programa_name

Contenido del artículo

  • Conceptos básicos de Bash Loop
  • Bash Break y Continuar los comandos
  • Ejemplos de bucle útiles
  • Conclusión

Conceptos básicos de Bash Loop

Bash hasta el bucle/hecho
Considere el siguiente código:

Sea n = 0
hasta ["$ n" -eq 5]; hacer
Echo $ n
((++ n))
hecho

La salida es:

0
1
2
3
4

Cuando comienza el programa, se declara la variable n y se le asigna cero. Los dos comandos antes de "Hecho" se ejecutan 5 veces. ((++ n)) incrementos n por 1 para cada iteración. Tenga en cuenta las posiciones de las palabras reservadas, "hasta", "hacer" y "hecho". Los dos comandos se repiten hasta que se cumple la condición ["$ n" -eq 5]. En la condición, "-eq" significa "igual a". La condición es que el valor de n es igual a 5. Tenga en cuenta que los valores resonados comienzan de 0 a 4. Esto se debe a que, para cada iteración, se verifica la condición de la construcción, antes de que se ejecute el cuerpo (dos comandos) de la construcción. Si la condición es falsa, el cuerpo no se ejecutaría. La palabra reservada, "hecho", siempre debe escribirse en una nueva línea.

La sintaxis para el bucle hasta/hecho es:

hasta los comandos de prueba; hacer consecuentes comandos; hecho

El segundo semicolon no es necesario si la palabra reservada, "hecho" se escribe en una nueva línea.

Si la condición sale con cero, lo que significa verdadero, el cuerpo del bucle se ejecuta. Si la condición sale con un número mayor que cero, lo que significa falso, el cuerpo del bucle no se ejecuta.

BASH WHILE/BOCO HECHO
Este bucle es similar al bucle hasta/hecho, excepto que la condición debe ser reformulada. Ambas construcciones usan la palabra reservada "hacer". El siguiente código produce la misma salida que antes:

Sea n = 0
mientras ["$ N" -lt 5]; hacer
Echo $ n
((++ n));
hecho

En la condición del código, "-lt" significa "menos que". La sintaxis para el bucle while/ded es:

mientras que los comandos de prueba; hacer consecuentes comandos; hecho

Bash para/bucle hecho
Hay dos sintaxis para el bucle "para", que son:

para ((expr1; expr2; expr3)); hacer comandos; hecho

y

para el nombre [[en [palabras ...]]; ] hacer comandos; hecho

El siguiente código utiliza la primera sintaxis para producir el mismo resultado, como se indicó:

para ((n = 0; n < 5; ++n)); do
Echo $ n
hecho

En el ((comando compuesto, la primera expresión inicializa la variable n a cero. La siguiente expresión es la condición while. La última expresión en el comando compuesto de doble paréntesis es la expresión de incremento. Luego está el cuerpo, que puede consistir en más de un comando, y luego "hecho".

La segunda sintaxis se usa mejor con una matriz; ver a continuación.

Bash Break y Continuar los comandos

romper
Todas las iteraciones (ejecución repetida del cuerpo) destinadas a un bucle no deben ejecutarse necesariamente. El comando de descanso se puede usar para detener las iteraciones restantes. En el siguiente código, las iteraciones se detienen justo después de n igual a 2.

para ((n = 0; n < 5; ++n)); do
Echo $ n
if ((n == 2)); entonces
romper
FI
hecho

La salida es:

0
1
2

En este bucle, se han producido tres iteraciones.

continuar
Se puede omitir una iteración utilizando el comando continuar. El siguiente código ilustra esto:

para ((n = 0; n < 5; ++n)); do
if ((n == 2)); entonces
continuar
FI
Echo $ n
hecho

La salida es:

0
1
3
4

La iteración para mostrar 2 ha sido omitida.

Los comandos de descanso y continuar también se pueden usar en los bucles hasta/hecho y mientras/.

Ejemplos de bucle útiles

Ejemplo de bucle hasta/hecho
Se toca el comando para crear un archivo de texto vacío. El siguiente script creará archivos de texto vacíos en el directorio de trabajo actual, hasta que el número de archivos creados sea 4:

Deja que i = 1
file = "myfile"
hasta [$ i -eq 5]; hacer
filename = "$ archivo $ i.TXT"
toque $ nombre de archivo
((++ i))
hecho

Los nombres de los archivos creados deben ser myFile1.txt, myFile2.txt, myfile3.txt y myFile4.TXT.

El único semicolon en el código se puede omitir si "hacer" se escribe en la siguiente línea.

Ejemplo de bucle while/hecho
El comando para crear un directorio vacío es mkdir. El siguiente script creará directorios vacíos en el directorio de trabajo actual hasta que el número de directorios creados sea 4:

i = 1
dir = "mydir"
mientras [$ i -lt 5]; hacer
dirname = "$ dir $ i"
mkdir $ dirname
((++ i))
hecho

El nombre de los directorios creados debe ser MyDir1, MyDir2, MyDir3 y MyDir4.

El único semicolon en el código se puede omitir si "hacer" se escribe en la siguiente línea.

Para ejemplo de bucle
La segunda sintaxis para el bucle mencionado anteriormente es:

para el nombre [[en [palabras ...]]; ] hacer comandos; hecho

Esta sintaxis se usa mejor con una lista. En términos simples, la sintaxis es:

para variable en la lista; hacer comandos; hecho

La lista puede ser una matriz. El siguiente comando lee una línea de entrada de texto desde el terminal en la matriz arr:

Leer ARR

A medida que se ejecuta el script, cuando llega a este comando, se detendrá (con un cursor intermitente) para que el usuario ingrese la entrada. Si el usuario tipos:

Uno, dos, tres

En una línea y las presiones entran, luego el primer elemento de la matriz tendría la palabra "uno", el segundo tendría la palabra "dos", y el tercero tendría "tres". Tenga en cuenta que los valores de entrada estaban separados por espacios.

El siguiente código utiliza la segunda sintaxis for-loop para leer y mostrar una entrada al script:

Echo "Escriba valores y presione Entrar:"
Leer ARR
para var en $ arr; hacer
Echo $ var
hecho

Si la entrada fue:

Uno, dos, tres

Entonces la salida sería:

uno
dos
tres

El único semicolon en el código se puede omitir si "hacer" se escribe en la siguiente línea.

Comando de selección de bash

El comando select no es realmente un bucle. Sin embargo, implica iteración, que no está codificada por el programador. En términos simples, la sintaxis de comando select es:

Seleccione el elemento en [Lista]
hacer
[Comandos]
hecho

Aquí, "Seleccionar", "In", "Do" y "Hecho" son palabras reservadas. Un uso del comando select es mostrar los elementos de la lista al terminal. El siguiente script ilustra esto:

Seleccione el artículo en plátano, limón, naranja, pera, piña
hacer
romper
hecho

Tenga en cuenta el uso del comando break. La salida es:

1) plátano,
2) limón,
3) naranja,
4) pera,
5) piña
#?

La lista consta de los valores de plátano, limón, naranja, pera y piña. Estos valores se han mostrado y numerado. El símbolo "#?"(Y el cursor intermitente al lado) espera que el usuario escriba algo y presione la tecla ENTER. Escriba cualquier cosa, luego presione la tecla ENTER y finalmente finalice la ejecución del script.

Observe que la lista se ha mostrado como un menú, numerado, para la salida. Con esto, el usuario puede seleccionar un elemento en el menú escribiendo el número correspondiente, junto a "#?", Luego presione la tecla ENTER. El siguiente script ilustra cómo se selecciona Orange escribiendo el número 3:

Seleccione el artículo en plátano, limón, naranja, pera, piña
hacer
echo $ respuesta
romper
hecho

La pantalla de salida es:

#? 3
entonces
3

Conclusión

Un bucle en Bash es una construcción; Una construcción es un comando compuesto. El cuerpo de la construcción tiene al menos un comando. A partir de ahora, Bash tiene solo tres bucles, que están hasta/hecho, mientras/hecho, y para/hecho. Cada bucle usa la palabra reservada "hacer". Después de que se haya escrito la condición, "hacer" debe ser precedido por ';', o escribirse en la siguiente línea del código. Cada bucle toma una condición. Los bucles hasta/hecho y mientras/hecho son similares. La principal diferencia ocurre al codificar la condición.

El comando select es un comando compuesto, pero no es realmente un bucle. Permite al usuario seleccionar un elemento de una lista de menú cuando el script se ejecuta interactivamente.

Los comandos de descanso y continuar se pueden usar en un bucle. El comando de descanso se puede usar para detener las iteraciones. Por otro lado, el comando continuar se puede usar para omitir una iteración.

Eso es todo lo que hay que golpear bucles. La función que queda que se estudiará es "Cómo codificar las condiciones?". Esto merece un artículo completamente diferente y no se puede incluir en este. Consulte el artículo en este sitio web, titulado "Condicionales Bash en profundidad", sobre cómo codificar las condiciones.

Chrys