Skip to content

Commit 7cbc083

Browse files
011-bash-loops [es] (#97)
* 011-bash-loops [es] * Update ebook/es/content/011-bash-loops.md * Update ebook/es/content/011-bash-loops.md
1 parent beafe86 commit 7cbc083

File tree

1 file changed

+199
-0
lines changed

1 file changed

+199
-0
lines changed

ebook/es/content/011-bash-loops.md

Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
# Bucles en Bash
2+
3+
Como en cualquier otro lenguaje, los bucles son muy convenientes. Con Bash puede usar bucles `for`, bucles `while` y bucles `until`.
4+
5+
## Bucles for
6+
7+
Esta es la estructura de un bucle for:
8+
9+
```bash
10+
for var in ${lista}
11+
do
12+
comandos
13+
done
14+
```
15+
16+
Ejemplo:
17+
18+
```bash
19+
#!/bin/bash
20+
21+
usuarios="devdojo bobby tony"
22+
23+
for usuario in ${usuarios}
24+
do
25+
echo "${user}"
26+
done
27+
```
28+
29+
Un rápido resumen del ejemplo:
30+
31+
* Primero, especificamos una lista de usuarios y almacenamos el valor en una variable llamada `$usuarios`.
32+
* Después, iniciamos nuestro bucle `for` con la palabra clave `for`.
33+
* Luego definimos una nueva variable que representaría cada elemento de la lista que damos. En nuestro caso, definimos una variable llamada `usuario`, que representaría a cada usuario de la variable `$usuarios`.
34+
* Luego especificamos la palabra clave `in` seguida de nuestra lista que recorreremos en bucle.
35+
* En la siguiente línea, usamos la palabra clave `do`, que indica lo que haremos en cada iteración del bucle.
36+
* Luego especificamos los comandos que queremos ejecutar.
37+
* Finalmente, cerramos el bucle con la palabra clave `done`.
38+
39+
También puede utilizar `for` para procesar una serie de números. Por ejemplo, esta es una forma de hacer un bucle del 1 al 10:
40+
41+
```bash
42+
#!/bin/bash
43+
44+
for num in {1..10}
45+
do
46+
echo ${num}
47+
done
48+
```
49+
50+
## Bucles while
51+
52+
La estructura de un bucle while es bastante similar a la del bucle `for`:
53+
54+
```bash
55+
while [ condición ]
56+
do
57+
comandos
58+
done
59+
```
60+
61+
Este es un ejemplo de un bucle `while`:
62+
63+
```bash
64+
#!/bin/bash
65+
66+
contador=1
67+
while [[ $contador -le 10 ]]
68+
do
69+
echo $contador
70+
((contador++))
71+
done
72+
```
73+
74+
Primero, especificamos una variable contador y la pusimos a `1`, luego dentro del bucle, añadimos el contador usando esta declaración `((contador++))`. De esta manera, nos aseguramos de que el bucle se ejecutará sólo 10 veces y no se ejecutará para siempre. El bucle se completará tan pronto como el contador se convierta en 10, ya que esto es lo que hemos establecido como condición: `while [[ $contador -le 10 ]]`.
75+
76+
Vamos a crear un script que pregunte al usuario por su nombre y no permita una entrada vacía:
77+
78+
```bash
79+
#!/bin/bash
80+
81+
read -p "¿Cuál es su nombre? " nombre
82+
83+
while [[ -z ${nombre} ]]
84+
do
85+
echo "Su nombre no puede estar en blanco. Por favor, introduzca un nombre válido"
86+
read -p "Ingrese su nombre de nuevo " nombre
87+
done
88+
89+
echo "Hola ${nombre}"
90+
```
91+
92+
Ahora, si ejecuta lo anterior y simplemente pulsa enter sin proporcionar información, el bucle se ejecutará de nuevo y le preguntará su nombre una y otra vez hasta que proporcione alguna información.
93+
94+
## Bucles Until
95+
96+
La diferencia entre los bucles `until` y `while` es que el bucle `until` ejecutará los comandos dentro del bucle hasta que la condición sea verdadera.
97+
98+
Estructura:
99+
100+
```bash
101+
until [ condición ]
102+
do
103+
comandos
104+
done
105+
```
106+
107+
Ejemplo:
108+
109+
```bash
110+
#!/bin/bash
111+
112+
contador=1
113+
until [ $contador -gt 10 ]
114+
do
115+
echo $contador
116+
((contador++))
117+
done
118+
```
119+
120+
## Continue y Break
121+
Al igual que con otros lenguajes, puede usar `continue` y `break` con tus scripts bash también:
122+
123+
* `continue` le dice a su script bash que detenga la iteración actual del bucle y comience la siguiente iteración.
124+
125+
La sintaxis de la sentencia continue es la siguiente:
126+
127+
```bash
128+
continue [n]
129+
```
130+
131+
El argumento [n] es opcional y puede ser mayor o igual a 1. Cuando se da [n], se reanuda el n-ésimo bucle que lo rodea. continue 1 es equivalente a continue.
132+
133+
```bash
134+
#!/bin/bash
135+
136+
for i in 1 2 3 4 5
137+
do
138+
if [ $i -eq 2 ]
139+
then
140+
echo "saltando el número 2"
141+
continue
142+
fi
143+
echo "i es igual a $i"
144+
done
145+
```
146+
147+
También podemos utilizar el comando continue de forma similar al comando break para controlar múltiples bucles.
148+
149+
150+
* `break` le dice a su script bash que termine el bucle directamente.
151+
152+
La sintaxis de la sentencia break tiene la siguiente forma:
153+
154+
```bash
155+
break [n]
156+
```
157+
[n] es un argumento opcional y debe ser mayor o igual a 1. Cuando se proporciona [n], se sale del n-ésimo bucle que lo encierra. break 1 es equivalente a break.
158+
159+
Ejemplo:
160+
161+
```bash
162+
#!/bin/bash
163+
164+
num=1
165+
while [ $num -lt 10 ]
166+
do
167+
if [ $num -eq 5 ]
168+
then
169+
break
170+
fi
171+
((num++))
172+
done
173+
echo "Bucle completado"
174+
```
175+
176+
También podemos usar el comando break con múltiples bucles. Si queremos salir del bucle actual, ya sea interno o externo, simplemente usamos break, pero si estamos en el bucle interno y queremos salir del bucle externo, usamos break 2.
177+
178+
Ejemplo:
179+
180+
```bash
181+
#!/bin/bash
182+
183+
for (( a = 1; a < 10; a++ ))
184+
do
185+
echo "bucle externo: $a"
186+
for (( b = 1; b < 100; b++ ))
187+
do
188+
if [ $b -gt 5 ]
189+
then
190+
break 2
191+
fi
192+
echo "bucle interno: $b "
193+
done
194+
done
195+
```
196+
197+
El script bash comenzará con a=1 y pasará al bucle interno y cuando llegue a b=5, romperá el bucle externo.
198+
Podemos usar sólo break en lugar de break 2, para romper el bucle interno y ver cómo afecta a la salida.
199+

0 commit comments

Comments
 (0)