Escrevendo um loop bash para verificar diferenças no tamanho do arquivo em loop

0

Estou escrevendo um loop bash contínuo para verificar se há novos e-mails no arquivo / var / spool / mail. Esse script precisa ser contínuo e compara o tamanho do loop anterior. Se o tamanho aumenta, então precisa ecoar alguma coisa. Isso é o que eu tenho agora. Não está ecoando nada quando eu o executo. Não tenho certeza se está pegando a diferença no tamanho do arquivo. Para executá-lo, você precisa inserir ./"o nome do script "/ 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
    
por guitar player 26.07.2017 / 00:23

1 resposta

0

Tente isso

#!/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

O problema com o seu código atual é que você está realmente verificando a diferença no tamanho do arquivo durante os 5 segundos da segunda suspensão. Significa que você iria declarar novamente o tamanho do arquivo a cada 10 segundos, depois esperar 5 segundos e declarar novamente o arquivo SizeNew e compará-los (ocupe-se do intervalo de 5 segundos).

No meu exemplo, você declara fileSize uma vez porque está fora do loop while, então a cada 10 segundos vamos dar uma olhada no novo tamanho e compará-lo com o antigo tamanho de arquivo original.

    
por 26.07.2017 / 01:09