De ejecución:
matados2k@imperio:~/curso$ ./ejemplo46.sh matados2k manolito karuchi
matados2k está conectado
manolito no está conectado
karuchi no está conectado
matados2k@imperio:~/curso$
Si sois observadores os daréis cuenta de que el uso de ';' y '.' sirve para meter en la misma línea las partes de las estructuras (cualquiera) que se esperan que estén en otra línea, observad que yo lo he hecho con el 'if'.
Estructura de control 'While'.
El bucle 'while' es otra estructura de control iterativa cuya intención es repetir un bloque de código mientras su condición se mantenga verdadera. Su estructura es así:
while comandos1
do
comandos2
done
Los comandos de 'comandos1' se ejecutan, y si el resultado del último comando de la lista es 0, se ejecutan los comandos de 'comandos2'. La secuencia se repite mientras el resultado de comandos1 es 0 (recordad el 0 es verdadero).
Ejemplo:
#!/bin/sh
while who |grep -s "$1 tty" >/dev/null
do
sleep 60
done
echo "$1 está desconectado?"
De ejecución:
matados2k@imperio:~/curso$ ./ejemplo46.sh matados2k
matados2k está desconectado?
matados2k@imperio:~/curso$
Este script verifica si el usuario que se pasa como argumento está conectado a una consola de texto fuera del entorno gráfico, mientras lo está el script espera 60 segundos antes de hacer una nueva verificación. Para probarlo, loguéate en una, arranca el script en otra, vuelve a la consola primera y desloguéate y vuelve a la segunda y espera.
Quiero justo lo contrario. Estructura de control 'Until'.
Puede darse el caso de que lo que buscamos sea justamente todo lo contrario a 'While', que repite la secuencia mientras el resultado de la condición sea 0, puede que necesitemos que se repita cuando no sea 0.
La estructura que nos permite realizar esto es la siguiente:
until comandos1
do
comandos2
done