Циклы Continous в 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 &
0
задан 19 November 2014 в 14:37

2 ответа

Можно использовать бесконечный цикл в ударе:

while true ; do
    # Your code here.
    sleep 30;
done

можно также запланировать периодическое выполнение программы проверки крон .

2
ответ дан 6 October 2019 в 10:05

Да, Вам нужен бесконечный цикл со сном 30 секунд. Следующий отрывок сделает:

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

, Но я думаю, что Вы скоро найдете, что выполнение его в сценарии удара, вероятно, не, что Вы хотите сделать. Задачи как это обычно требуют некоторой формы демона.

Для ответа на измененный вопрос вот изменение сценария, который должен работать как ожидалось:

#!/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
2
ответ дан 6 October 2019 в 10:05

Другие вопросы по тегам:

Похожие вопросы: