
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