Bucles continuos en Bash

Bucles continuos en Bash

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

información relacionada