Cómo escribir bucle en Bash con ejemplos

Cómo hacer automatización con bash para bucle en el sistema operativo Linux / UNIX? ¿Cómo utilizo romper, continuar y el parámetro para la expresión de control de bucle? ¿Cómo actuar en archivos que usan for loop?

For loop es una herramienta muy útil para resolver muchos problemas en el mundo de la programación y por lo tanto resolveremos algunos problemas en el mundo real. En Linux usamos bucles a través de Bash, Python para hacer automatización como script de contraseña, script de conteo. En este artículo, explicaremos todos los tipos de bucles de Bash.

1) para bucle

Podemos usar For loop para leer todos los elementos de una lista o parte de ellos y mostrar estos elementos en la pantalla.

Sintaxis del bucle For

para variable en element1 element2 element3 O
hacer
comandos
hecho

Haremos un guión para enviar mensaje de saludo para cada día de la semana, así que usaremos for bucle para leer cada día e imprimirlo. Crea un archivo welcome.sh con nano editor y pegue el código a continuación.

#!/bin/bash
for day in Sunday Saturday Monday Tuesday Wednesday Thursday Friday
do
echo "Welcome $day day"
done

Ejecutar el welcome.sh archivar con bash mando.

$ bash welcome.sh

output
Welcome Sunday day
Welcome Saturday day
Welcome Monday day
Welcome Tuesday day
Welcome Wednesday day
Welcome Thursday day
Welcome Friday day

El bucle for tomará cada elemento de la lista respectivamente y asignará este elemento a la variable $day, luego ejecute el código entre do y done luego vuelva a la parte superior, asigne el siguiente elemento de la lista y repita.

Podemos usar un rango con for loop para poner el punto de inicio y el punto final.

#!/bin/bash
for i in {10..20}
do
echo "Welcome $i times"
done

$ bash range.sh

output
Welcome 10 times
Welcome 11 times
Welcome 12 times
Welcome 13 times
Welcome 14 times
Welcome 15 times
Welcome 16 times
Welcome 17 times
Welcome 18 times
Welcome 19 times
Welcome 20 times

Si queremos contar un número par del 1 al 20, agregaremos paso por rango.

#!/bin/bash
for i in {10..20..2}
do
echo "Welcome $i times"
done

$ bash even.sh

output
Welcome 10 times
Welcome 12 times
Welcome 14 times
Welcome 16 times
Welcome 18 times
Welcome 20 times

Otro tipo de paso de uso con for loop.

#!/bin/bash
for ((i=1;i<=25;i+=5))
do
echo $i
done

$ bash step5.sh

output
1
6
11
16
21

Y para paso negativo podemos utilizar el siguiente tipo.

#!/bin/bash
for ((i=25;i>=1;i-=5))
do
echo $i
done

$ bash step-5.sh

output
25
20
15
10
5

Ejemplos en el bucle For

1) Actuar sobre archivos usando for loop

Bash For loop es la mejor manera cuando estamos trabajando con archivos.

#!/bin/bash
for file in ~/*.txt
do
echo $file
done

$ bash find_txt.sh

output
/root/cat.txt
/root/echo.txt
/root/file.txt
/root/f.txt
/root/nano.txt
/root/printf.txt

2) Una línea para bucle

podemos ejecutar el bucle For en una línea, cambiaremos el nombre de todos *.txt archivos para eliminar la extensión del archivo.

$ for filename in *.txt; do mv "$filename" "${filename%.txt}"; done

O en guion

!#/bin/bash
for filename in *.txt
do
mv "$filename" "${filename%.txt}"
done

3) Leer argumentos de la línea de comandos

Cuando estamos ejecutando el script For loop, podemos ingresar argumentos.

for myvalue in $*
do
echo "Argument: $myvalue"
done

$ bash linoxide.sh I Love LinOxide

output
Argument: I
Argument: Love
Argument: LinOxide

4) Leer números pares e impares

Escribiremos un script para leer los números pares e impares.

for (( n=10; n<=15; n++ ))
do
if (( $n%2==0 ))
then
echo "$n is even"
else
echo "$n is odd"
fi
done

$ bash even_odd.sh

output
10 is even
11 is odd
12 is even
13 is odd
14 is even
15 is odd

2) bucle while

Mientras que el bucle depende de que la condición sea verdadera, si la condición es falsa, el intérprete saldrá del bucle.

Sintaxis del bucle while

mientras [ <some condition> ]hacer

hecho

Contaremos de 10 a 20 e imprimiremos los resultados. Por lo que pondremos una condición de que el contador sea menor o igual que 20.

#!/bin/bash
# Basic while loop
counter=10
while [ $counter -le 20 ]
do
echo Number : $counter
((counter++))
done

$ bash while.sh

output
Number : 10
Number : 11
Number : 12
Number : 13
Number : 14
Number : 15
Number : 16
Number : 17
Number : 18
Number : 19
Number : 20

3) Hasta bucle

Hasta bucle como bucle while pero el intérprete ejecuta los comandos dentro de él hasta que la condición se vuelve verdadera.

Sintaxis del bucle hasta

hasta [ <some condition> ]hacer

hecho

Contaremos de 10 a 20 e imprimiremos los resultados. Así que pondremos la condición de que el contador sea mayor o igual a 20.

#!/bin/bash
# Basic Until loop
counter=10
until [ $counter -gt 20 ]
do
echo Number : $counter
((counter++))
done

PS bash hasta.sh

output
Number : 10
Number : 11
Number : 12
Number : 13
Number : 14
Number : 15
Number : 16
Number : 17
Number : 18
Number : 19
Number : 20

4) Control de bucles

Nosotros podemos usar Break o Continue para controlar los bucles.

Declaración de ruptura

por Break declaración, podemos salir del ciclo y no es necesario completar el ciclo cuando usamos if declaración dentro del bucle.

#!/bin/bash
# Basic loop use break
counter=10
until [ $counter -gt 20 ]
do
echo Number : $counter
if [ $counter -eq 15 ]
then
echo Done
break
fi
((counter++))
done

$ bash break.sh

output
Number : 10
Number : 11
Number : 12
Number : 13
Number : 14
Number : 15
Done

Continuar declaración

Para Continue declaración, podemos seguir el ciclo y no es necesario terminar el ciclo cuando estamos usando if declaración dentro del bucle.

#!/bin/sh

NUMS="1 2 3 4 5 6 7"

for NUM in $NUMS
do
Q=`expr $NUM % 2`
if [ $Q -eq 0 ]
then
echo "A number is an even number!!"
continue
fi
echo "Found odd number"
done

$ bash continue.sh

output
Found odd number
A number is an even number!!
Found odd number
A number is an even number!!
Found odd number
A number is an even number!!
Found odd number

5) Seleccionar bucle

Seleccione bucle como while y hasta bucle pero le permite crear un sistema de menú simple.

Sintaxis del bucle de selección

seleccione var en hacer

hecho

Haremos tres opciones y usaremos select bucle para elegir entre ellos.

#!/bin/bash
# select script

PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Option 1")
echo "you choose choice 1"
;;
"Option 2")
echo "you choose choice 2"
;;
"Option 3")
echo "you choose choice $REPLY which is $opt"
;;
"Quit")
break
;;
*) echo "invalid option $REPLY";;
esac
done

$ bash select.sh

output
1) Option 1
2) Option 2
3) Option 3
4) Quit
Please enter your choice: 1
you chose choice 1
Please enter your choice: 5
invalid option 5
Please enter your choice: 4

Conclusión

  1. Bash For bucle utilizado en sincronización, creación de contraseña, copia de seguridad, etc.
  2. Do while es lo mismo que while pero el intérprete ejecuta el primer código sin ninguna condición
  3. La declaración de ruptura es muy importante para salir del ciclo.
  4. La declaración de selección es útil cuando tenemos muchas opciones

Leer también:

  • ¿Cuál es la función de Shebang en Linux?
  • 70 Preguntas y respuestas de la entrevista de Shell Scripting