我正在编写一个连续的 bash 循环来检查 /var/spool/mail 文件中的新邮件。此脚本需要连续并比较前一个循环的大小。如果大小增加,则需要回显某些内容。这就是我现在所拥有的。当我运行它时,它没有回显任何内容。我不确定它是否正在获取文件大小的差异。要运行它,您需要输入 ./“脚本名称”/var/spool/mail/user
#!/bin/bash
checkUsage()
{
while true
do
sleep 10
fileSize=$(stat -c%s $1)
sleep 5;
fileSizeNew=$(stat -c%s $1)
if [ "$fileSize" -lt "$fileSizeNew" ]
then
echo -e "[Notice : ] $USER you have mail!!!"
exit
fi
done
}
checkUsage $1
答案1
尝试这个
#!/bin/bash
checkUsage()
{
fileSize=$(stat -c%s $1)
while true; do
sleep 10
fileSizeNew=$(stat -c%s $1)
if [ "$fileSize" -lt "$fileSizeNew" ]; then
echo -e "[Notice : ] $USER you have mail!!!"
exit
fi
done
}
checkUsage $1
当前代码的问题在于,您实际上只在第二次睡眠的 5 秒内检查文件大小的差异。这意味着您每 10 秒重新声明一次 fileSize,然后等待 5 秒并重新声明 fileSizeNew 并进行比较(注意 5 秒的间隔)。
在我的例子中,您声明一次 fileSize,因为它位于 while 循环之外,因此每 10 秒我们就会查看一次新大小并将其与旧的(永久的原始文件大小)进行比较。