Bash 中的連續循環

Bash 中的連續循環

我有興趣編寫一個程式來為使用者取得郵件假脫機檔案的大小。 (在 Linux 上,假脫機檔案位於 /var/spool/mail/$USER 中)。為此,我想創建一個每 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

相關內容