08 - Estructuras repetitivas

Índice

1. Mientras
2. Hasta
3. Para
3.1. Contadores
3.2. Primer caso
3.3. Segundo caso
3.4. Tercer caso
4. Select
5. Ejemplos


1. Mientras

Se utiliza en el caso de que el contenido suceda al menos una vez.

while condicion
do
  orden 1
  ...
  orden n
done

2. Hasta

Se utiliza en el caso de que no tiene por que suceder el contenido de la estructura.

until condicion
do
  orden 1
  ...
  orden n
done

3. Para

Se utiliza cuando sabemos cuantas veces sucederá la repetición.

3.1. Contadores

Los contadores se utilizan para contar cada vuelta de la iteración. Las cuentas pueden ser progresivas (0, 1,..., n-1, n) o regresivas (n, n-1,..., 1, 0).
Para incrementar o decrementar su valor nos serviremos de la doble suma/resta o también del comando seq:

cont++
ó
cont--
ó
seq valorInicial incremento valorFinal

Los contadores pueden tener valor numérico o alfabético, en cada caso se explica cual.
En el caso de seq el incremento no tiene que ser necesariamente unitario.

3.2. Primer caso

for ((cont=0;cont<n;i++))
do
  orden 1
  ...
  orden n
done

ó

for cont in `seq valorInicial incremento valorFinal`
do
  orden 1
  ...
  orden n
done

En el doble paréntesis hay que:

  • iniciar el contador (cont=0);
  • exponer la condición hasta la que se realizará la iteración (n>cont ó ...);
  • incrementar/decrementar el contador (i++ ó seq ...)

Nótese que la orden seq no nesecita doble paréntesis pero sí acentos graves.

3.3. Segundo caso

En este caso el número de veces que se repite la iteración es la cantidad de elementos de la enumeración que hay a la derecha del in, además el contador va cogiendo el valor de cada elemento correspondiente en la enumeración en cada una de las iteraciones.
No es necesario iniciar el contador.

for cont in enumeracion
do
  orden 1
  ...
  orden n
done

3.4. Tercer caso

En este caso la enumeración es la salida de un comando que debe encerrarse entre acentos graves.

for cont in `comando`
do
  orden 1
  ...
  orden n
done

4. Select

Con esta iteración creamos un menú. En este caso en la enumeración introducimos los elementos del menú y la instrucción select crea un menú donde escogeremos la opción que nos interese. La opción escogida se almacena en la variable de select (el elemento, no el número de opción).
Este es un bucle infinito del que sólo se puede salir utilizando el comando de escape break.

select var in a b c d e salir
do
  orden 1
  ...
  orden n
done

5. Ejemplos

#!/bin/bash
sal=n
while [ $sal = n ]
do
echo "¿Quieres salir del bucle? (no: n; sí: cualquier otra cosa)"
read sal
done
exit 0

#!/bin/bash
sal=n
until [ $sal = s ]
do
  echo "¿Quieres salir del bucle? (sí: s; no: cualquier otra cosa)"
  read sal
done
exit 0

#!bin/bash
for cont in `seq 0 2 20`
do
  echo $cont
done
exit 0

#!/bin/bash
for cont in a e i o u
do
  echo Archivos que empiezan por la letra $cont en tu carpeta personal:
  echo
  ls ~/$cont*
  echo
done
exit 0

#!/bin/bash
num=0
for cont in `ls`
do
  echo fichero $num: $cont
  let num=num+1
done
exit 0

#!/bin/bash
select var in a b c d e salir
do
  echo "Has escogido $var"
  if test $var = salir
  then
   break
  fi
done
exit 0