No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Programación en Bash Shell

Curso de Programación en Bash Shell

Marco Antonio Toscano Freire

Marco Antonio Toscano Freire

Break y continue

27/43
Recursos
  • Break se utiliza para salir de la ejecución de los ciclos for y while.
  • Continue se utiliza para continuar con la siguiente ejecución.

Aportes 34

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

El tema es que el tema del tema de todo este tema es todo un tema.

tema...tema...tema....tema...tema

Este curso lo deberían renovar

Aplicando lo aprendido 🤣🤣🤣

infinito_tema=1
while [ infinito_tema = infinito_tema ]; do
 echo "EL TEMA $infinito_tema!"
 infinito_tema=$(( infinito_tema + 1 ))
done

Ya enserio, puede trabajar en mejorar eso, enseña super bien pero la muletilla se vuelve cansona

La explicación es

  • 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

Bingo

Es todo un tema viste

Listo y entendido

#!/bin/bash
# Programa para utilizar Break y Continue
# DBZ


echo "Sentencias break y continue"
for fil in $(ls)
do
    for nombre in {1..3}
    do
        if [ $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

Pésimo instructor, definitivamente saber sobre un “TEMA” no significa que sepa explicarlo.

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

Que tema con Marco

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; do
	    if [[ $linea =~ ^#.*$ ]]; then
			continue;	
		fi
		if [[ $file == 1* ]]; then
			break;
		fi
		echo "$linea"
	done < "$file"
done

# !/bin/bash
# Programa sobre el uso de break y continue
# Autor: Luber Cueva

echo "SENTENCIAS BREAK Y CONTINUE"

for file in $(ls)  
do
    for 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_ …).

SENTENCIAS BREAK Y CONTINUE
Hola
Hola
File archivo: 11_ifElseIfElse.sh _ 1
Chao

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_ …).

Hola
File archivo: 3_tipoOperadores.sh _ 3
Chao
Hola
File archivo: 3_tipoOperadores.sh _ 4
Chao
Hola
Hola
Hola
Hola
Hola
File archivo: 5_substitutionCommand.sh _ 1
Chao
Hola
File archivo: 5_substitutionCommand.sh _ 2
Chao

No me quedo claro el uso del break con esta clase. Por otro lado, no queda muy claro el uso del “== *4” en el elif.

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

Codigo:

# ! /bin/bash
# Programa para ejemplificar el uso de break y continue
# Autor: Jose Suarez

echo "Sentencias de Break y continue"
for fil in $(ls)
do
    for nombre in {1..4}
    do
        if [ $fil = "10_download.sh" ]; then
            break;
        elif [[ $fil == 4*  ]]; then
            continue;
        else
            echo "Nombre Archivo: $fil _ $nombre"
        fi
    done
done

Como desearía que bash soportase OOP 😅

Hola, dejo mis apuntes.

Saludos

# ! /bin/bash
# Programa para uso de break y continue
# Author Diego Beltran histagram @diegodevelops

echo "Break y continue"
for fil in $(ls)
do
    for nombre in {1..4}
    do
    if [ $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
Me encontré algo que a mi me resulta interesante: Si deseas que `continue` afecte a un bucle externo, puedes proporcionarle un argumento que indique el nivel del bucle que debe continuar. Por ejemplo, `continue 2` haría que el flujo de control pase a la siguiente iteración del segundo bucle más externo.
En Bash, las sentencias \*\*`break`\*\* y \*\*`continue`\*\* se utilizan dentro de bucles para controlar el flujo de ejecución: \### \*\*`break`\*\*: \- \*\*`break`\*\* se utiliza para salir de un bucle antes de que haya terminado todas sus iteraciones. \- Se puede usar en bucles \*\*`for`\*\*, \*\*`while`\*\* o \*\*`until`\*\*. \#### Ejemplo: ```bash \#!/bin/bash for i in {1..5} do if \[ $i -eq 3 ]; then break # Sale del bucle cuando i es 3 fi echo "Número: $i" done ``` \*\*Salida:\*\* ``` Número: 1 Número: 2 ``` Aquí, el bucle se detiene cuando `i` es igual a 3. \### \*\*`continue`\*\*: \- \*\*`continue`\*\* se usa para omitir el resto del código en la iteración actual y pasar a la siguiente iteración del bucle. \#### Ejemplo: ```bash \#!/bin/bash for i in {1..5} do if \[ $i -eq 3 ]; then continue # Salta la iteración cuando i es 3 fi echo "Número: $i" done ``` \*\*Salida:\*\* ``` Número: 1 Número: 2 Número: 4 Número: 5 ``` En este caso, el número 3 se salta debido al uso de \*\*`continue`\*\*, pero el bucle sigue con las siguientes iteraciones. \### Resumen: \- \*\*`break`\*\*: sale completamente del bucle. \- \*\*`continue`\*\*: salta a la siguiente iteración del bucle.
entiendo el break pero no entiendo por qué imprime todos los archivos restantes de la carpeta. Y entiendo que no imprima el continue

#!/bin/bash

for i in {1..4}
do
    if [ $i -ne 3 ]; then
        if [ $i -eq 4 ]; then
            break
        fi
        for j in {a..z}
        do
            if [ "$j" == "n" ] || [ "$j" == "p" ]; then
                continue
            else
                echo "$j"
            fi
        done
    fi
done

Estaría bueno que explique la diferencia entre [ ], [[ ]], ( ) y (( ))

Para que no se compliquen mucho la vida les tengo un eejmplo mas sencillo y eficaz:
**break ** funciona para salir del bucle mientras que **continue **solo se detiene de donde esta y pasa a la siguiente iteracion (sin salirse del bucle).

# Continue
echo -e "\nUsando continue cuando i == 5"
for ((i=0; i<10;i++))
do
    if [ $i -eq 5 ]; then
        continue
    fi
    echo "Numero: $i"
done

Y esto es lo que imprime en consola

Usando continue cuando i == 5
Numero: 0
Numero: 1
Numero: 2
Numero: 3
Numero: 4
Numero: 6
Numero: 7
Numero: 8
Numero: 9

Como pudieron ver al cumplir la condicion del if el numero 5 no lo imprimio si no solo se lo salto por la palabra continue y continuo con los demas.

# Break
echo -e "\nUsando break cuando i == 5"
for ((i=0; i<10;i++))
do
    if [ $i -eq 5 ]; then
        break
    fi
    echo "Numero: $i"
done

Y esto es lo que imprime en consola.

Usando break cuando i == 5
Numero: 0
Numero: 1
Numero: 2
Numero: 3
Numero: 4

Y como pueden ver al cumplirse la condicion del if se salio del ciclo for gracias a palabra break.

  • ¿ Cómo utilizar las sentencia break y continue ?
  1. Utilizar la sentencia break para salir de la ejecución de los loops for, while; es decir para la iteración.
  2. Utilizar la sentencia continue para continuar con la siguiente iteración.

No quedo claro la diferencia entre continue y break en el script.

  • Break se utiliza para salir de la ejecución de los ciclos for y while.
  • Continue se utiliza para continuar con la siguiente ejecución.

Ejecute el srcipt de la clase y los dos se comportaron como “continue”.

El código hoy presentado no me funciono a mi en 2021 ya que el break solo terminaba el loop “for nombre in {1…4}” y seguía con el archivo 11 mostrando todo.
Buscando la solución que encontré fue poner break 2; y me funciono

Para reforzar la clase con mayor detalle y explicación
https://blogs.upm.es/estudiaciencia/bucles-y-condicionales/

Script escrito y probado en Ubuntu 18.04
5 echo "Continue and break sentences"
6 for file in $(ls) #OS command
7 do
8 for filename in {1…3}
9 do
10 if [[ $file == download_files ]]; then #stop printing
11 #the list of files when the file called "download_files"
12 #is found
13 break;
14 elif [[ $file == 17_* ]]; then #skip printing the files
15 #starting with "17_"
16 continue;
17 else
18 echo "Nombre de archivo (repeticion $filename): $file"
19 fi
20 done
21 done

gracias

6 Minutos de clase…Al menos 3 de tema…
Excelente profesor, pero el exceso de la muletilla le resta mucha importancia, es virtualmente imposible no darse cuenta, y los comentarios anteriores lo validan.

#!/bin/bash

for file in $(ls)
do
    for number in {1..4}
    do
        if [ $file = "10_download.sh" ]; then
            break;
        elif [[ $file == 4* ]]; then
            continue;
        else
            echo "Filename: $file-$number"
        fi
    done
done