Непрерывные циклы в Bash

Непрерывные циклы в Bash

Мне интересно написать программу, которая будет получать размер файла спула почты для пользователя. (Файлы спула находятся в /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

Связанный контент