编写 bash 循环来检查循环中文件大小的差异

编写 bash 循环来检查循环中文件大小的差异

我正在编写一个连续的 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 秒我们就会查看一次新大小并将其与旧的(永久的原始文件大小)进行比较。

相关内容