Loops contínuos no Bash

0

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, eu gostaria de criar um loop contínuo que excita uma vez a cada 30 segundos. Cada vez que o loop é executado, ele irá comparar o tamanho do arquivo de spool de email com seu tamanho do loop anterior. Se o novo tamanho for maior que o tamanho antigo, ele será impresso com uma mensagem dizendo "Você tem um novo e-mail".

Eu escrevi o script abaixo, mas não estou conseguindo fazê-lo funcionar. Alguém tem alguma sugestão 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 &
    
por Justin 18.11.2014 / 15:50

2 respostas

2

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ção por cron .

    
por choroba 18.11.2014 / 15:55
2

Sim, você precisa de um loop infinito com um sono de 30 segundos. O snippet a seguir será o seguinte:

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

Mas eu acho que você logo descobrirá que fazer isso em um script bash provavelmente não é o que você quer fazer. Tarefas como essa geralmente exigem alguma forma de um daemon.

Para responder à sua pergunta modificada, aqui está uma variação do seu script que deve funcionar como 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
    
por BostonHiker 18.11.2014 / 15:59