Linux.Shell.Control de Flujos.
Condiciones.
Las condiciones son algo muy esencial en cualquier lenguaje de programación, dependiendo de lo que pase a lo largo de un procedimiento, escogeremos un camino u otro. Veamos como funciona:
if [ expression ]
then
instrucciones
fi
Cuando se cumple y no se cumple:
if [ expression ]
then
instrucciones cuando se cumple la condición.
else
instrucciones cuando no se cumple la condición
fi
Cuando son muchos if…else anidados:
if [ expression 1 ]
then
instrucciones
elif [ expression 2 ]
then
instrucciones
elif [ expression 3 ]
then
instrucciones
else
instrucciones
fi
Bucles.
Los bucles es una instrucción también muy usada e importante en la programación, ya que permite crear bucles de instrucciones tantas veces como nos haga falta y así evitar repetir mucho código.
While.
Este tipo de bucle hace las instrucciones que vienen dentro hasta que no se cumpla la condicíon, es decir, lo va hacer mientras que la condición se cumpla. Veamos como funciona:
while command
do
instrucciones
done
Un ejemplo:
#!/bin/bash
a=0
while [ $a -lt 12 ]
do
echo “El valor de a es: $a”
a=`expr $a + 1`
done
En este ejemplo hacemos el bucle hasta que sea mayor de 11 o 12 y muestra el valor de a. Es decir, el resultado será algo así; 0 1 2 3 4 5 6 7 8 9 10 11 y en el 12 sale del bucle.
FOR.
El bucle for funciona en listas de elementos. Repite un conjunto de instrucciones para cada elemento en una lista.
for var in elemento1 elemento2 ... elementoN
do
instrucciones por cada elemento
done
Un ejemplo:
#!/bin/bash
for var in 0 1 2 3 4 5 6 7 8 9
do
echo $var
done
¿y que pasaría si fueran 300 elementos? Sería un poco pesado poner 300 elementos en el for. Para evitar eso podemos usar la instrucción seq:
#!/bin/bashfor var in $(seq 0 9)
do
echo $var
done
Until loop.
Este tipo de bucle se usa cuando queramos que haga el bucle mientras las condición no se cumpla. Veamos como se usa:
until command
do
instrucciones
done
Veamos un ejemplo:
#!/bin/bash
a=0
until [ ! $a -lt 12 ]
do
echo $a
a=`expr $a + 1`
done
El bucle lo va a hacer mientras que no se cumpla la condición, es decir, negar que a sea menor de 12 quiere decir que es mayor o igual de 12. Como a no es mayor e igual de 12, hace instrucciones que hay dentro. El bucle se acabará cuando sea 12.
Select.
Este tipo de bucle proporciona una manera fácil de crear un menú numerado desde el cual los usuarios pueden seleccionar opciones. Veamos como funciona:
select var in opcion1 opcion2... opcionN
do
instrucciones
done
Veamos un ejemplo:
#!/bin/bash
select opcion in 1 2 3 4 5 6 none
do
case $opcion in
1|2|3)
echo "Has seleccionado entre los 3 primeros"
;;
4|5|6)
echo "Has seleccionado entre los 3 últimos"
;;
none)
break
;;
*) echo "ERROR: No has seleccionado nada"
;;
esac
done
Control del Bucle.
Existen momentos concretos en los que necesitemos parar un bucle para que no continúa o que se salta parte de éste. Existen dos instrucciones que nos permiten hacer estas tareas; Break y Continue.
Break. Esta instrucción sirve para romper el bucle de forma tajante, es decir, finaliza el procedimiento repetitivo y se va la línea de código siguiente. Un ejemplo:
#!/bin/bash
a=0
while [ $a -lt 10 ]
do
echo $a
if [ $a -eq 5 ]
then
break
fi
a=`expr $a + 1`
done
echo “El bucle ha terminado en la posición $a”
En este ejemplo vamos hacer un bucle del 0 al 10. Pero cuando llega a 5 mediante la condición, hace un break y se sale de bucle y echa la siguiente línea de código después de bucle.
Continue. Esta instrucción funciona muy parecida a break, la diferencia está que no rompe el bucle entero, si no la iteración y pasa a la siguiente en el bucle. Veamos un ejemplo:
#!/bin/bash
NUMS="1 2 3 4 5 6 7"
for NUM in $NUMS
do
Q=`expr $NUM % 2`
if [ $Q -eq 0 ]
then
echo "El numero es par!!"
continue
fi
echo "El número es impar"
done
Este ejemplo creamos un bucle con for, que comprenderá los números del 1 al 7. Simplemente queremos averiguar si es par o impar, es decir, si el resto de dividir cada número entre 2 es 0.
En cuanto entre en la condición y el resultado sea 0, muestra un mensaje de que es par. Como sólo es en ese caso, usamos un continúa. El programa lo que hace es evitar el código que hay después del If y no muestra nada, continuando con el siguiente número del For.
Continúa por Caracteres Especiales y Metacaracteres.