La sintáxis del while es la siguiente:
while condicion
do
accion_1
accion_2
...
done
En este caso, las acciones se efectúan hasta que la condición se haga falsa.
La sintáxis para el until es igual, pero en este caso
la acción se repite mientras la condición sea falsa:
until condicion
do
accion_1
accion_2
...
done
Construiremos el mismo ejemplo utilizando ambas formas. Se trata de un pequeño programa que nos avisa cuando un usuario entra en sesión. Además nos aseguraremos de que se le pase el argumento, avisando con un mensaje amigable cuando no sea así:
case $# in
0) echo "Baboso! falta el nombre del usuario" ; exit 1 ;;
1) usuario = $1 ;;
esac
while sleep 60
do
who | grep $usuario
done
sleep es un programa que no hace nada durante el
tiempo en segundos que se le indica. En este ejemplo, sleep
duerme durante un minuto entre cada vez que el pregunta si el usuario
está en sesión. Ahora con until:
case $# in
0) echo "Baboso! falta el nombre del usuario" ; exit 1 ;;
1) usuario = $1 ;;
esac
until who | grep $usuario
do
sleep 60
done
Ejercicio: Puede decir cuál es la diferencia primordial entre ambas versiones?