|
1 2 3 4 5 |
dir="/var/tmp" for file in $dir/*.bak do rm -f $file done |
|
1 2 3 4 5 |
dir="/var/tmp" for file in $dir/*.bak do rm -f $file done |
|
1 2 3 4 5 |
LISTA="10 9 8 7 6 5 4 3 2 1" for var in $LISTA do echo $var done |
|
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/bash echo -n "Respuesta:" read RESPUESTA case $RESPUESTA in S* | s*) RESPUESTA="SI";; N* | n*) RESPUESTA="NO ";; *) RESPUESTA="PUEDE";; esac echo $RESPUESTA |
Las órdenes break y continue sirven para interrumpir la ejecución secuencial del cuerpo del bucle. break transfiere el control a la orden que sigue a done, haciendo que el bucle termine antes de tiempo. continuetransfiere el control a done, haciendo que se evalúe de nuevo la condición, prosiguiendo el bucle. En ambos casos, las órdenes del cuerpo del bucle siguientes a estas sentencias, no se ejecutan. Lo normal es que formen parte de una sentencia condicional, como if. Un par de ejemplos de su uso es:
# Muestra todos los parámetros, si encuentra una «f» finaliza
while [ $# -gt 0 ]
do
if [ $1 = «f» ]
then
break
fi
echo Parámetro: $1
shift
done
# Muestra todos los parámetros, si encuentra una «f»
# se lo salta y continúa el bucle
while [ $# -gt 0 ]
do
if [ $1 = «f» ]
then
shift
continue
fi
echo Parámetro: $1
shift
done
Es interesante destacar la diferencia entre ejecutar las siguientes órdenes:
$ aux=‘ls‘
$ aux1=(‘ls‘)
En el primer caso, la variable aux contiene la salida de ls como una secuencia de caracteres. Mientras que en el segundo caso, al haber utilizado los paréntesis, aux1 es un array, y cada entrada está formada por los nombres de fichero devueltos por la orden ls. Supongamos que el directorio actual tenemos los siguientes ficheros: a.latex, b.latex, c.latex, d.latex, e.latex f.latex, observe el resultado de ejecutar las órdenes anteriores:
$ ls
a.latex b.latex c.latex d.latex e.latex f.latex
$ aux=‘ls‘
$ echo $aux
a.latex b.latex c.latex d.latex e.latex f.latex
$ echo ${aux[0]}
a.latex b.latex c.latex d.latex e.latex f.latex
$ aux1=(‘ls‘)
$ echo ${aux1[0]}
a.latex