El tema es que el tema del tema de todo este tema es todo un tema.
Bienvenida e Introducción
Todo lo que aprenderás para programar en Bash Shell
Componentes de Linux, Tipos de Shell y Comandos de información
Bash scripting
Crear nuestro primer Script
Ejecutar nuestro script con un nombre único
Programación Shell Básica
Declaración de Variables y Alcance en Bash Shell
Tipos de Operadores
Script con Argumentos
Sustitución de Comandos en variables
Debug en Script
Reto 1
Script Interactivos
Capturar información usuario
Expresiones Regulares
Validar información
Paso de parámetros y opciones
Descargar información de Internet
Reto 2
Condicionales
Sentencias If/Else
Reto 3
If Anidados
Expresiones Condicionales
Sentencias Case
Iteración
Arreglos
Sentencia for loop
Sentencia while loop
Loop Anidados
Break y continue
Menú de Opciones
Reto 4
Archivos
Archivos y Directorios
Escribir dentro de archivos
Leer Archivos
Operaciones Archivos
Reto 5
Empaquetamiento
Empaquetamiento TAR, GZIP y PBZIP 2
Respaldo Empaquetado con clave
Transferir información red
Reto 6
Funciones
Crear funciones y Paso de Argumentos
Funciones de instalar y desinstalar postgres
Funciones sacar y restaurar respaldos en postgres
Reto 7
Cierre del curso
Cierre
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 34
Preguntas 4
El tema es que el tema del tema de todo este tema es todo un 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
#!/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.
No quedo claro la diferencia entre continue y break en el script.
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
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?