GNU/Linux >> Tutoriales Linux >  >> Linux

Bash Scripting Part2 – Bucles for y while con ejemplos

En la primera parte de este tutorial Bash Scripting, discutimos cómo escribir un script Bash. Exploramos los diversos usos y escenarios únicos en los que los scripts de Bash pueden resultar útiles, lo que constituye un gran ejemplo de lo increíbles que pueden ser.

En esta parte del tutorial, echaremos un vistazo a for comando, y el while dominio. Mostraremos cómo podemos usar estos comandos para hacer bucles para iterar sobre una serie de valores.

El bucle For

En Linux, un bucle es lo que usamos para ejecutar comandos en un intervalo específico repetidamente. Los bucles se utilizan en una gran variedad de lenguajes de programación con el mismo propósito.

Hay varios tipos diferentes de bucles en Linux, pero en esta sección del artículo, nos centraremos en el for bucle.

#!/bin/bash

 for y in a b c d w x y z 

> do

> echo $y

done

Como puede ver en la captura de pantalla anterior, atribuimos la variable "y", que es solo un marcador de posición sin sentido utilizado por el comando, a algunas letras del alfabeto.

Luego pasamos esa variable al echo comando, y pudo generar nuestras letras a continuación.

Iterando sobre valores simples

Podemos usar el for comando en un script Bash. Para hacer esto, primero debemos crear un archivo de texto en nuestra terminal Linux. Puede utilizar el touch comando para crear fácilmente archivos de texto.

$ touch script

La sintaxis anterior creará un archivo de texto que llamaremos "script". Asegúrese de crear su archivo de texto usando .sh extensión de archivo. Al crear script , querremos editar en nuestro script real que contiene el for comando.

Podemos lograr esto ejecutando un par de comandos de edición de archivos de texto diferentes, como nano comando, y el vi mando, etc.

Pero recomendamos ir con nano , ya que es uno de los editores de texto de comando más simples y fáciles de usar en Linux.

$ nano script

La sintaxis anterior abrirá nuestro script en el editor de texto nano. Aquí, querremos escribir nuestro script.

Tenga en cuenta que este archivo de texto debe contener #!/bin/bash , que informa al script Bash sobre qué shell usar, por lo que es un componente fundamental para crear correctamente un script Bash.

#!/bin/bash

for var in first second third fourth fifth; do

	echo The $var item

done

Iterando sobre valores complejos

En el ejemplo anterior, mostramos cómo usar for Comando para iterar sobre valores simples en un script Bash creado por el usuario. La palabra simple aquí se refiere a valores que contienen una sola palabra.

Pero a veces, tendrá una lista que incluye, en lugar de lo que vimos en el ejemplo anterior con "primero", algo similar a "el primero", que contiene más de una palabra para un solo valor. Estos valores son lo que llamamos valores "complejos".

Si su lista tiene estos valores complejos, deberá hacer referencia a ellos entre comillas, para que el script entienda que es solo un valor.

#!/bin/bash

for var in first "the second" "the third" "I’ll do it"; do

	echo "This is: $var"

done

Sustitución de comandos

También podemos usar la sustitución de comandos en nuestro for comando en nuestro script Bash.

#!/bin/bash

my_file="file01"

for var in $(cat $my_file); do

        echo " $var"

done

Aquí usamos la sustitución de comandos con una subcapa Bash, como se ve por el uso del comando cat dentro de $( ); esto nos permite usar la salida del cat comando y obtenga el contenido del archivo asumiendo que cada línea tiene una palabra.

Pero si hay espacios en una de estas líneas, cada palabra se considerará un campo. En este caso, deberá indicarle al shell que trate las líneas nuevas como un separador en lugar de espacios.

El separador de campos

De forma predeterminada, el shell de Bash considera los siguientes caracteres como campos.

  • Espacio
  • Pestaña
  • nueva línea

Si su texto incluye alguno de estos caracteres, el shell asumirá que es un campo nuevo y tendrá que cambiar el separador de campo interno o la variable de entorno IFS si necesita usar estos caracteres.

$ IFS=$’n’

La sintaxis anterior hará que el shell Bash considere las líneas nuevas como un separador en lugar de un carácter de espacio.

#!/bin/bash

file="/etc/passwd"

IFS=$'n'

for var in $(cat $file); do

	echo " $var"

done

También puede asignar el separador de campo a dos puntos con IFS como se muestra a continuación.

$ IFS=:

Bastante fantástico, ¿eh?

Iterando sobre archivos de directorio

También puedes usar el for bucle en un script Bash para enumerar los archivos en su directorio de inicio.

#!/bin/bash

for obj in /home/ubuntu/*; do

	if [ -d "$obj" ]; then

		echo "$obj is a folder"

	elif [ -f "$obj" ]; then

		echo "$obj is a file"

	fi

done

Este proceso requiere que utilice el if declaración para comprobar archivos y carpetas. Pero eso no debería representar un gran problema para usted si ha leído la publicación anterior. Pero si por casualidad necesita un repaso, le recomiendo que lo revise.

Utilizamos un comodín llamado asterisco (*) en nuestro script Bash que contiene un for bucle que nos permite listar los archivos y carpetas en nuestro directorio de inicio. En las secuencias de comandos de Bash, este proceso se denomina "globbing de archivos .” Archivo globbing significa todos los archivos existentes con un nombre.

Tenga en cuenta que las variables en nuestro if declaración se escriben entre comillas porque los nombres de archivo o carpeta pueden contener espacios. Si hubiéramos omitido este paso, es posible que no hubiéramos podido listar todos los archivos y directorios.

Iterar sobre las líneas del archivo

Podemos usar el for bucle en un script Bash para iterar sobre el contenido del archivo:

#!/bin/bash

IFS=$'n'

for text in $(cat /etc/passwd); do

	echo "This line $text ++ contains"

	IFS=:

	for field in $text; do

		echo " $field"

	done
done

Aquí tenemos dos ciclos, el primer ciclo itera sobre las líneas del archivo y el separador es la nueva línea, la segunda iteración es sobre las palabras en la línea misma y el separador son los dos puntos:

datos del archivo

Puede aplicar esta idea cuando tenga un archivo CSV o cualquier archivo de valores separados por comas. La idea es la misma; solo tienes que cambiar el separador para que se ajuste a tus necesidades.

Para bucle estilo C

Si está familiarizado con el lenguaje C, puede notar que hay algo un poco fuera de lugar en for bucles en Linux a veces.

Esto se debe a que existen dos formas de escribir for bucles; la forma estándar de Linux, que ya hemos cubierto al comienzo de este tutorial, y la forma de "estilo C".

for (var= 0; var < 5; var++)

{

printf(“number is %dn”, var);

}

La sintaxis anterior es para for bucle escrito en C. El estilo C for loop en Linux está escrito de manera muy similar a esto con algunos pequeños cambios, que se pueden observar a continuación.

for (( variable =inicio; condición; paso de iteración))

for (( var = 1; var < 5; var++ ))

Para ayudar a pintar mejor la imagen, incluiremos un script Bash de ejemplo usando el estilo C for bucle en nuestra terminal de Linux.

#!/bin/bash

for ((var = 1; var <= 10; var++)); do

	echo "number is $var"

done

Pon esto en nuestro archivo de texto y enciéndelo.

El comando Continuar

El Bash continue El comando ignora los comandos dentro del ciclo externo para la iteración actual y da control a la siguiente. Puede usar este comando para dejar de ejecutar los comandos restantes dentro de un ciclo sin salir del ciclo.

En los siguientes ejemplos, veremos cómo se puede usar este comando en los bucles de secuencias de comandos de Bash en Linux.

El Comando Romper

Puede usar el comando break para salir de cualquier bucle, como los bucles while y till.

#!/bin/bash

for number in 10 11 12 13 14 15; do

	if [ $number -eq 14 ]; then

		break

	fi

	echo "Number: $number"

done

El ciclo se ejecuta hasta que llega a 14 y luego el comando sale del ciclo.
Veremos algunos ejemplos más de este comando un poco más tarde.

El ciclo while

El ciclo for no es la única forma de realizar un ciclo en Bash scripting. El while loop hace el mismo trabajo, pero verifica una condición antes de cada iteración. La estructura del while bucle se puede ver a continuación.

while [ condition ]

do

    commands

done

Proporcionaremos un ejemplo con un script Bash.

#!/bin/bash

number=10

while [ $number -gt 4 ]; do

	echo $number

	number=$(($number - 1))

done

La forma en que funciona este script Bash es simple; comienza con while comando para verificar si el número es mayor que cero, luego ejecutará el ciclo y el valor del número disminuirá cada vez en 1. En cada iteración del ciclo, el script imprimirá el valor del número. El bucle se ejecutará hasta que ese número llegue a 0.

Bucles anidados

Puede crear bucles dentro de otros bucles, como while bucle por ejemplo. Estos bucles dentro de un bucle se denominan bucles anidados. Nos sumergiremos en estos examinando primero cómo crear un for anidado bucle en el siguiente ejemplo.

Múltiples bucles for (for anidados)

En los ejemplos anteriores hasta ahora en este tutorial, hemos mostrado cómo crear for bucles en un script Bash en Linux. Pero también existe algo que llamamos for anidado bucles Estos son bucles dentro de otros bucles, o simplemente múltiples bucles, para decirlo de manera simple.

Le mostraremos un ejemplo sencillo de cómo se ve esto, junto con un breve examen y una descripción a continuación.

for y in a b c d e f

do

    for u in a b c d e f

    do

        echo "$y$u"

    done

done

Como puede ver en la captura de pantalla anterior, el resultado que recibimos al ejecutar nuestro script en la terminal de línea de comandos de Linux es el siguiente:nuestro texto de ejemplo en cada for el bucle es "a b c d e f".

Lo que hace nuestro script es hacer eco del texto en el bucle externo junto con el texto del bucle interno.

El script continúa generando el primer campo (en este caso, espacios, lo explicaremos un poco más adelante) del texto en el ciclo externo hasta que todos los campos contenidos en el ciclo interno hayan sido generados.

Una vez completada la salida del bucle interno, nuestro script Bash comenzará a generar el siguiente campo de texto en el bucle externo.

Todo este proceso se repetirá hasta que todos los campos de cada bucle se hayan impreso por completo en la salida de su terminal Linux.

Múltiples ciclos while (while anidados)

Como el for anidado bucles de comando, también existe while anidado bucles de comando. Estos funcionan exactamente igual que los bucles anidados para for dominio; un bucle dentro de otro bucle.

La sintaxis a continuación tendrá un parecido sorprendente con el while normal. loop, como la estructura de un while anidado loop es simplemente una forma expandida de la base while bucle, que se puede observar en la siguiente sintaxis.

while [condition]

do 

  statements1 

  statements2

  while [condition]

do

  continue

done

  statements3

done

La sintaxis anterior realizará tareas específicas hasta que se cumplan las condiciones que ha seleccionado. Esto es lo que se llama un bucle. Pero dado que el ciclo del ejemplo anterior está anidado, esto significa que una de las tareas que mencionamos anteriormente es otro ciclo en sí mismo.

Mientras sigue

Hemos mostrado cómo el while bucle y for loop puede ser muy útil para ejecutar procesos complejos usando scripts Bash en Linux.

Pero a veces, por varias razones, deberá eliminar uno de los bucles en su script Bash. Este escenario, por brutal que parezca, ocurre a menudo en el trabajo de administración del sistema. Por lo tanto, es posible que desee familiarizarse con este concepto.

En el shell de Bash, el break comando y continue El comando puede proporcionar las herramientas necesarias para controlar el flujo de sus bucles de secuencias de comandos de Bash.

Mostraremos cómo funcionan estos comandos individualmente con un par de ejemplos a continuación.

La sintaxis para utilizar brea comando para salir de un while bucle es el siguiente:

$  while [ condition ]
do
    commands
continue
done

El continue comando break el comando funciona de manera muy similar y pueden considerarse opuestos entre sí; el continue el comando funciona exactamente igual que el break comando, solo que continúa el bucle en lugar de eliminarlo.

Salir del ciclo mientras

El break El comando elimina el ciclo actual y da control al siguiente comando que sigue a ese ciclo. Puede utilizar este proceso para salir de bucles como for ,while , etc. La sintaxis del break El comando es el siguiente:

$ while [ condition ]
do
    commands
break
done

Pero como mencionamos anteriormente, tanto el continue comando y el break El comando se puede usar para otros bucles de script Bash además del while círculo. Mostraremos cómo usarlos en for bucle.

Salir del bucle

Puede usar estos comandos de control de bucle en un for círculo. Usaremos el break comando para salir de for bucle en nuestro script Bash.

#!/bin/bash

for number in 10 11 12 13 14 15; do

	if [ $number -eq 14 ]; then

		break

	fi

	echo "Number: $number"

done

El for el ciclo se ejecuta hasta que alcanza el número que especificamos en el script bash, que es 14. Al llegar a nuestro número especificado, el break el comando saldrá del for bucle.

Declaración Romper If

Acabamos de mostrar cómo podemos usar break comando para salir de for bucles, pero también podemos usar este comando para salir del if instrucción dentro de estos bucles de script Bash.

i=0

while [[ $i -lt 10 ]]

do

  echo "Number: $i"

  ((i++))

  if [[ $i -eq 5 ]]; then

    break

  fi

done

Continuar declaración

Hacemos lo mismo que hicimos en el ejemplo anterior con continue comando como hicimos con el break comando en un while bucle en un script Bash.

i=0

while [[ $i -lt 10 ]]; do

  ((i++))

  if [[ "$i" == '5' ]]; then

    continue

  fi

  echo "Number: $i"

done

Pensamientos finales

Espero que hayas aprendido una o dos cosas nuevas. O, al menos, espero que hayas podido repasar lo que ya sabes. Mis últimas palabras hoy para ti serían que sigas leyendo y practicando.

Gracias.


Linux
  1. Tutorial de Bash HereDoc con ejemplos

  2. Bash For Loop Guía y ejemplos

  3. Scripts de Linux:3 procedimientos para bucles while en Bash

  4. Ejemplos de ciclos for y while de Bash

  5. '&&' vs. '&' con el comando 'test' en Bash

Bash Scripting – Para bucle explicado con ejemplos

Bash Scripting - Funciones explicadas con ejemplos

Bash Scripting - Variables explicadas con ejemplos

Bash Scripting - Comando Printf explicado con ejemplos

Bash Scripting:matriz asociativa explicada con ejemplos

Bash For Loops con ejemplos