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

相关内容