我有兴趣编写一个程序来获取用户的邮件假脱机文件的大小。(在 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