Domina el control de flujo en Bash con break y continue. Aquí verás cómo detener por completo un bucle o saltar a la siguiente iteración según condiciones reales sobre nombres de archivos. Con un ejemplo práctico en Ubuntu, entenderás cuándo usar cada sentencia y qué efecto produce en un for que recorre un directorio.
¿Qué hacen break y continue en Bash?
Las sentencias de iteración requieren control claro. break sale del bucle actual de inmediato. continue salta el resto del cuerpo y pasa a la siguiente vuelta. Esto es útil cuando una validación o un cálculo determina que debes detener el proceso o ignorar temporalmente un elemento.
break: termina el bucle ante una condición de parada definida.
continue: evita ejecutar el resto y sigue con el siguiente elemento.
Se usan con if, elif, else para decisiones claras.
Facilitan filtros por nombre o tamaño de archivo.
¿Cómo implementar break y continue en un for sobre archivos?
El ejemplo recorre archivos del directorio. Si el nombre coincide con uno específico, se usa break. Si el nombre comienza con “4-”, se usa continue. En otro caso, se imprime el nombre.
#!/usr/bin/env bash# 19-break-continue.shecho"Sentencias: break y continue"forarchivoin *;doif[["$archivo"=="download.sh"]];thenbreak# Rompe el bucle al encontrar el archivo objetivo.elif[["$archivo"==4-* ]];thencontinue# Salta archivos que empiezan con 4-.elseecho"$archivo"# Imprime los demás archivos.fidone
for archivo in *: recorre todos los archivos del directorio actual.
if igual a "download.sh": condición de salida con break.
elif patrón 4-*: filtrado con comodines y continue.
else: salida normal con echo.
Buenas prácticas clave en Bash:
Usa comillas para variables: evita expansiones inesperadas.
Respeta espacios en condiciones: [[ expr ]] requiere espacios.
Emplea patrones con globbing: 4-* coincide con nombres que empiezan por 4-.
Organiza el flujo con if, elif, else para legibilidad.
¿Qué resultado y aprendizajes clave ofrece el ejemplo?
El recorrido imprime nombres que no coinciden con los filtros, demostrando el efecto real de cada sentencia.
Archivos 4-*: no se imprimen porque se aplica continue.
Archivo "download.sh": al encontrarlo, break detiene el bucle.
Se observan salidas como 2-, 3-, 5-, 6-, 7-, 8-, 9- impresas.
"10" no aparece porque el bucle se rompe al cumplirse la condición.
Conceptos y habilidades reforzadas:
Sentencias de iteración con un bucle for.
Control de flujo con break y continue.
Validaciones con if, elif, else sobre nombres de archivo.
Uso de patrones y comodines para filtros rápidos.
Edición y ejecución del script en Ubuntu.
¿Te gustaría ver variantes con otras condiciones o añadir validaciones nuevas? Deja tus preguntas y casos de uso en los comentarios.
Que en el intérprete de comandos lee todo el if por que esta dentro de un bucle for y el break de este ‘if’ termina el bucle.
Pero hay un elsif que está anidado y su condición es que, si detecta algún $file que empiece con 4 entonces continue pero esta función pasa por alto dicho archivo ocultándolo, por lo tanto el bucle termina cuando llega al 10_download.sh
En resumidas cuentas la orden del break significa cuando finaliza y el continue lo oculta iterando hasta su condición principal y como estas condiciones están dentro del bucle for
#!/bin/bash# Programa para utilizar Break y Continue# DBZecho "Sentencias break y continue"for fil in$(ls)dofor nombre in{1..3}doif[ $fil ="10_download.sh"]; then
echo "Se encontro el archivo $fil y por eso se termian el bucle interno" echo "************************************************************"break; elif [[ $fil ==4*]]; then
echo "Se encontro el archivo $fil y continua" echo "************************************************************"continue;else echo "Nombre archivo:$fil _ $nombre" fi
done
done
este es mi avance en el curso,con este curso de programación bash he reforzado mas el concepto de bucles que se usan en lenguajes de programación como java o php, en este caso aplicado al bash
Ejemplo para leer contenido de archivos y saltear los comantarios
echo "Break y continue. Leo el contenido de los archivo"echo "Quito los comentarios"echo "No imprimo los archivo que comienzan con 1"for file in$(ls *.sh)do echo "--------------- $file ---------------------"while read -r linea;doif[[ $linea =~^#.*$ ]]; then
continue; fi
if[[ $file ==1*]]; then
break; fi
echo "$linea" done <"$file"done
La razon principal es porque cuando usas comillas estas "casteando" el texto que esta entre ellas como si fueran un string, y de esa forma le quitas la funcionalidad al * convirtiendolo en parte de la cadena. De la otra forma bash interpreta bien que queres decir 4 y cualquier cosa que venga atras, como si fuera una expresion regular.
Se trata de una wild card, es como un regex (Regular expresion) pero mas simple, y por lo visto es quivalente usar en bash == e =, sin embargo una de estas es incompatible con otras shells... (No sé cual xd)
por lo general continue se utiliza para poder saltar una iteración en especifico, ya que si quiero que mi programa salte el numero 3 de un bucle de 10 iteraciones simplemente se coloca continue a la iteración
# !/bin/bash
# Programa para ejemplificar el uso de break y continue# Autor:JoseSuarezecho "Sentencias de Break y continue"for fil in$(ls)dofor nombre in{1..4}doif[ $fil ="10_download.sh"]; then
break; elif [[ $fil ==4*]]; then
continue;else echo "Nombre Archivo: $fil _ $nombre" fi
done
done
# !/bin/bash
# Programa para uso de break y continue# AuthorDiegoBeltran histagram @diegodevelops
echo "Break y continue"for fil in$(ls)dofor nombre in{1..4}doif[ $fil ="10_download.sh"]; then
break; elif [[$file ==4*]]; then
continue;else echo "nombre del archivo es:$fil y cuenta del anidado es $nombre" fi
done
done
# !/bin/bash
# Programa sobre el uso de break y continue# Autor:LuberCuevaecho "SENTENCIAS BREAK Y CONTINUE"for file in$(ls)dofor name in{1..4}do echo "Hola"if[ $file ="10_download.sh"]; then
break; elif [[ $file ==4*]]; then
continue;else echo "File archivo: $file _ $name" fi
echo "Chao" done
done
El efecto de break es que solo llega a imprimir un "hola" y termina el for de adentro. Luego pasará al for de afuera, o sea que tendrá otro archivo (11_ ...).
En cambio con continue, imprime varios "Hola" y ya no los "Chao" y es por que a partir del continue ya no ejecuta lo que está a delante, sino que pasa a la siguiente iteración (continua con el archivo 4_ ...).