Я пишу непрерывный цикл bash для проверки новой почты в файле /var /spool /mail. Этот скрипт должен быть непрерывным и сравнивать размер предыдущего цикла. Если размер увеличивается, то нужно что-то повторить. Это то, что у меня сейчас. Это не повторяет ничего, когда я запускаю это. Я не уверен, что обнаруживает разницу в размере файла. Для его запуска вам необходимо ввести ./" имя скрипта "/var /spool /mail /user

#!/bin/bash
checkUsage()
{
while true
do
sleep 10
fileSize=$(stat -c%s $1)
        sleep 5;
        fileSizeNew=$(stat -c%s $1)

        if [ "$fileSize" -lt "$fileSizeNew" ]
        then
           echo -e  "[Notice : ] $USER you have mail!!!"
           exit 
        fi

done
}
checkUsage $1

1 ответ1

0

Попробуй это

#!/bin/bash
checkUsage()
{
fileSize=$(stat -c%s $1)
while true;     do
        sleep 10
        fileSizeNew=$(stat -c%s $1)
        if [ "$fileSize" -lt "$fileSizeNew" ]; then
                echo -e  "[Notice : ] $USER you have mail!!!"
           exit 
        fi

done
}
checkUsage $1

Проблема с вашим текущим кодом заключается в том, что вы действительно проверяете разницу в размере файла только в течение 5 секунд второго сна. Это означает, что вы будете повторно объявлять fileSize каждые 10 секунд, затем ждать 5 секунд и повторно объявлять fileSizeNew и сравнивать их (помните 5-секундный пробел).

В моем примере вы объявляете fileSize один раз, потому что он находится вне цикла while, поэтому каждые 10 секунд мы будем смотреть на новый размер и сравнивать его со старым - вечным исходным размером файла.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .