
我有興趣編寫一個程式來為使用者取得郵件假脫機檔案的大小。 (在 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
答案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