Loops contínuos no Bash

Loops contínuos no Bash

Estou interessado em escrever um programa que obtenha o tamanho do arquivo de spool de correio para o usuário. (Os arquivos de spool encontrados em /var/spool/mail/$USER no Linux). Para fazer isso, gostaria de criar um loop contínuo que execute uma vez a cada 30 segundos. Cada vez que o loop é executado, ele compara o tamanho do arquivo de spool de mensagens com o tamanho do loop anterior. Se o novo tamanho for maior que o antigo, farei com que ele imprima uma mensagem dizendo "Você tem uma nova correspondência".

Escrevi o script abaixo, mas não estou conseguindo fazê-lo funcionar. Alguém tem quaisquer sugestões para mim??

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 &

Responder1

Você pode usar um loop infinito no bash:

while true ; do
    # Your code here.
    sleep 30;
done

Você também pode agendar uma execução periódica do programa de verificaçãocron.

Responder2

Sim, você precisa de um loop infinito com suspensão de 30 segundos. O seguinte trecho servirá:

#!/bin/bash
while true
do
    # do any stuff you want
    echo "doing my thing"
    # sleep for 30 seconds
    sleep 30
done

Mas acho que em breve você descobrirá que fazer isso em um script bash provavelmente não é o que você deseja fazer. Tarefas como essa geralmente requerem algum tipo de daemon.

Para responder à sua pergunta modificada, aqui está uma variação do seu script que deve funcionar conforme o esperado:

#!/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

informação relacionada