
Estoy interesado en escribir un programa que obtenga el tamaño del archivo de cola de correo para el usuario. (Los archivos spool se encuentran en /var/spool/mail/$USER en Linux). Para hacer esto, me gustaría crear un bucle continuo que se ejecute una vez cada 30 segundos. Cada vez que se ejecuta el bucle, comparará el tamaño del archivo de cola de correo con el tamaño del bucle anterior. Si el nuevo tamaño es mayor que el tamaño anterior, haré que imprima un mensaje que diga "Tiene correo nuevo".
Escribí el script a continuación, pero no logro que funcione. ¿¿Alguien tiene alguna sugerencia para mi??
while true
do
clear
size= ls -l /var/spool | wc -c
sleep 30
newsize= ls -l /var/spool | wc -c
if [$size < $newsize]
then
echo "You've got mail!"
else
echo "Sorry no mail yet"
fi
sleep 30
done &
Respuesta1
Puedes usar un bucle infinito en bash:
while true ; do
# Your code here.
sleep 30;
done
También puede programar una ejecución periódica del programa de verificacióncron.
Respuesta2
Sí, necesitas un bucle infinito con un sueño de 30 segundos. El siguiente fragmento servirá:
#!/bin/bash
while true
do
# do any stuff you want
echo "doing my thing"
# sleep for 30 seconds
sleep 30
done
Pero creo que pronto descubrirás que hacerlo en un script bash probablemente no sea lo que quieras hacer. Tareas como ésta normalmente requieren algún tipo de demonio.
Para responder a su pregunta modificada, aquí hay una variación de su script que debería funcionar como se esperaba:
#!/bin/bash
while true
do
clear
size=$(ls -l /var/spool | wc -c)
sleep 30
newsize=$(ls -l /var/spool | wc -c)
if [ $size -lt $newsize ]
then
echo "You've got mail!"
else
echo "Sorry no mail yet"
fi
sleep 30
done