
Мне интересно написать программу, которая будет получать размер файла спула почты для пользователя. (Файлы спула находятся в /var/spool/mail/$USER в Linux). Для этого я хотел бы создать непрерывный цикл, который выполняется каждые 30 секунд. Каждый раз, когда цикл выполняется, он будет сравнивать размер файла спула почты с его размером из предыдущего цикла. Если новый размер больше старого, я заставлю его вывести сообщение «У вас новая почта».
Я написал скрипт ниже, но у меня не получается заставить его работать. Есть ли у кого-нибудь предложения для меня??
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 &
решение1
Вы можете использовать бесконечный цикл в bash:
while true ; do
# Your code here.
sleep 30;
done
Вы также можете запланировать периодический запуск программы проверки,хрон.
решение2
Да, вам нужен бесконечный цикл с задержкой в 30 секунд. Следующий фрагмент подойдет:
#!/bin/bash
while true
do
# do any stuff you want
echo "doing my thing"
# sleep for 30 seconds
sleep 30
done
Но я думаю, что вы скоро обнаружите, что делать это в скрипте bash, вероятно, не то, что вы хотите. Такие задачи обычно требуют какой-то формы демона.
Чтобы ответить на ваш измененный вопрос, вот вариант вашего скрипта, который должен работать так, как и ожидалось:
#!/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