Contenido
Bucles: for, while y until
Bash tiene una serie de estructuras de control de flujo de programa que se utilizan para repetir acciones en un programa. Entre estas estructuras de control, se encuentran los bucles, que permiten repetir una acción o un conjunto de acciones varias veces mientras se cumplen ciertas condiciones. En Bash, hay tres tipos de bucles principales: for, while y until.
Bucle: for
El bucle for es una estructura de control de flujo que se utiliza para iterar sobre una lista de elementos. Se usa para realizar una tarea un número finito de veces. El bucle for se define con la sintaxis «for variable in lista ; do acción ; done»:
#!/bin/bash
for variable in lista
do
accion
done
La variable toma el valor de cada elemento de la lista, y la acción se ejecuta una vez para cada valor de la variable. La lista puede ser una lista de números, una lista de cadenas o una lista de nombres de archivos, entre otros. Una vez se ejecutan las distintas acciones de la lista, el bucle se detiene.
Un ejemplo de bucle for es el siguiente:
#!/bin/bash
for i in 1 2 3 4 5; do
echo $i
done
En este ejemplo, la variable «i» toma el valor de cada número en la lista, y la acción «echo $i» se ejecuta para cada valor de «i». Esto imprimirá los números del 1 al 5.
Tipos de secuencias con bucles for
En Bash, se pueden utilizar diferentes tipos de secuencias en un bucle for, dependiendo de los requisitos del script. Aquí hay algunos tipos comunes de secuencias que se pueden utilizar:
Secuencia numérica: Se puede utilizar la sintaxis de rango de números para crear una secuencia numérica en el bucle for. La sintaxis es {inicio..fin..incremento}, donde «inicio» es el valor inicial de la secuencia, «fin» es el valor final de la secuencia y «incremento» es la cantidad en la que se incrementa el valor en cada iteración. Por ejemplo, {1..10..2} crea una secuencia de números impares del 1 al 9.
Secuencia de caracteres: Se puede utilizar una secuencia de caracteres en un bucle for para iterar a través de una lista de nombres de archivo o de directorios. La sintaxis es for elemento in lista, donde «lista» es una lista de valores separados por espacios. Por ejemplo, for archivo in *.txt se utilizaría para iterar a través de todos los archivos en el directorio actual que tienen la extensión «.txt».
Secuencia de números o caracteres generados por una expresión: Se pueden generar secuencias de números o caracteres utilizando una expresión que se evalúa en cada iteración del bucle for. Por ejemplo, se puede utilizar la expresión $(seq 1 10) para generar una secuencia de números del 1 al 10.
Secuencia de elementos en una matriz: Se pueden utilizar matrices en Bash para almacenar una lista de elementos, y luego iterar a través de la lista utilizando un bucle for. La sintaxis es for elemento in «${matriz[@]}», donde «matriz» es el nombre de la matriz. Por ejemplo, se puede utilizar la matriz=(«uno» «dos» «tres») y luego iterar a través de ella utilizando for elemento in «${matriz[@]}».
Secuencias numéricas
{Inicio..Fin..Incremento}
En Bash, se pueden crear secuencias numéricas utilizando un bucle for y la sintaxis de rango de números. Por ejemplo, para imprimir los números del 1 al 10, se puede utilizar el siguiente script:
#!/bin/bash
echo "Imprimiendo números del 1 al 10:"
for i in {1..10} #{Inicio..Fin}
do
echo $i
done
En este script, el bucle for itera a través de un rango de números del 1 al 10 utilizando la sintaxis de rango de números en la línea «for i in {1..10}». La variable «i» toma el valor de cada número en el rango de números especificado entre las llaves, y la acción «echo $i» se ejecuta una vez para cada valor de «i», lo que imprime cada número en la secuencia.
También se puede especificar un incremento entre los números en la secuencia utilizando la sintaxis «{inicio..fin..incremento}». Por ejemplo, para imprimir los números pares del 2 al 10, se puede utilizar la siguiente sintaxis:
#!/bin/bash
echo "Imprimiendo números pares del 2 al 10:"
for i in {2..10..2} #{Inicio..Fin..Incremento}
do
echo $i
done
En este ejemplo, el bucle for itera a través de los números pares del 2 al 10 en incrementos de 2.
$(seq Inicio Fin)
Otra forma de generar secuencias de números o caracteres utilizando una expresión que se evalúa en cada iteración del bucle for la expresión $(seq 1 10) para generar una secuencia de números del 1 al 10.
#!/bin/bash
echo "Secuencia de números del 1 al 10:"
for i in $(seq 1 10); do
echo $i
done
Este script de Bash genera una secuencia de números del 1 al 10 utilizando un bucle for y la función «seq».
El primer comando «echo» simplemente imprime en la pantalla la cadena de texto «Secuencia de números del 1 al 10:».
Luego, se inicia el bucle for con la sintaxis «for i in $(seq 1 10)». Esto crea una secuencia de números del 1 al 10 utilizando la función «seq» y la sintaxis de rango de números. La secuencia se almacena en la variable «i» en cada iteración del bucle.
Dentro del bucle, el comando «echo $i» imprime el valor de «i» en la pantalla. En la primera iteración, «i» tiene el valor 1 y se imprime en la pantalla. En la segunda iteración, «i» tiene el valor 2 y así sucesivamente hasta que se llega al final de la secuencia.
Al finalizar el bucle, el script finaliza su ejecución. Por lo tanto, el resultado final del script es imprimir la secuencia de números del 1 al 10 en la pantalla.
Secuencias de caracteres
En Bash scripting, se pueden utilizar secuencias de caracteres en bucles for para iterar a través de una lista de elementos, como nombres de archivo o directorios.
La sintaxis para una secuencia de caracteres en un bucle for es:
#!/bin/bash
for archivo in *.txt
do
echo $archivo
done
Este script utilizará la lista de archivos con la extensión «.txt» en el directorio actual y la variable «archivo» se utilizará para almacenar cada nombre de archivo durante cada iteración. Dentro del bucle, el comando «echo» imprimirá el nombre de archivo actual en la pantalla.
Otro ejemplo de una secuencia de caracteres podría ser una lista de nombres:
#!/bin/bash
nombres="Juan Maria Pedro Ana"
for nombre in $nombres
do
echo "Hola, $nombre"
done
Este script utilizará la variable «nombres» para almacenar una lista de nombres separados por espacios y la variable «nombre», dentro del bucle for, se utilizará para almacenar cada nombre durante cada iteración y el comando «echo» imprimirá un saludo personalizado para cada nombre en la lista.
Ejercicio Nº 5: Listar archivos.
Crear un script en Bash que imprima todos los nombres de archivo en el directorio actual utilizando un bucle for.
<< Resolución >>
Ejercicio Nº 6: Contador de archivos de texto
Escribe un script Bash que use un bucle for
para iterar a través de los archivos en un directorio, y para cada archivo que tenga la extensión «.txt», el script debe imprimir el nombre del archivo y la cantidad de líneas que contiene.
<< Resolución >>
Secuencia generada por una expresión
La sintaxis para una secuencia generada por una expresión en un bucle for es:
for elemento in $(expresion)
do
# comandos a ejecutar
done
Donde «elemento» es la variable que se utilizará para almacenar cada elemento de la secuencia generada durante cada iteración, y «expresion» es la expresión que se evaluará para generar la secuencia de números o caracteres.
Por ejemplo, como hemos visto anteriormente, para generar una secuencia de números del 1 al 10, se puede utilizar la expresión «$(seq 1 10)», como se muestra en el siguiente script:
#!/bin/bash
echo "Secuencia de números del 1 al 10:"
for i in $(seq 1 10)
do
echo $i
done
Donde «elemento» es la variable que se utilizará para almacenar cada elemento de la secuencia generada durante cada iteración, y «expresion» es la expresión que se evaluará para generar la secuencia de números o caracteres.
Por ejemplo, como hemos visto anteriormente, para generar una secuencia de números del 1 al 10, se puede utilizar la expresión «$(seq 1 10)», como se muestra en el siguiente script:
#!/bin/bash
echo "Secuencia de letras de la a a la z:"
for letra in $(echo {a..z})
do
echo $letra
done
Este script imprimirá la secuencia de letras de la «a» a la «z» utilizando la expresión «$(echo {a..z})» para generar la secuencia de caracteres. En cada iteración del bucle for, la letra actual se almacena en la variable «letra» y se imprime en la pantalla utilizando el comando «echo».