Uma rápida reescrita, com comentários em linha:
#!/bin/bash
file="afile"
maxsize=100
while true; do
# Use 'stat', the tool for getting file metadata, rather than 'du'
# and chewing on its output. It gives size in bytes, so divide by
# 1024 for kilobytes.
actualsize=$(($(stat --printf="%s" "$file")/1024))
if [[ $actualsize -ge $maxsize ]]; then
echo "size is over $maxsize kilobytes"
subject="size exceed on file $file"
emailAddr="[email protected]"
# In almost all cases, if you are using 'eval', either
# something has gone very wrong, or you are doing a thing in
# a _very_ suboptimal way.
echo "Date: $(date)" | mail -s "$subject" "$emailAddr"
else
echo "size is under $maxsize kilobytes"
fi
sleep 60
done
Além disso, sugiro que, em vez de executar um script com um loop infinito, altere o script para ser executado apenas uma vez e agendá-lo para ser executado usando uma entrada de tabela cron
.