Uma abordagem é criar um arquivo temporário e gravar todos os alertas de uso excessivo nesse arquivo. Se, depois de passarmos por todas as partições, o arquivo não estiver vazio, uma mensagem de email será enviada:
tmpfile="$HOME/.fs_usage_check.tmp"
echo -n "" >"$tmpfile"
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print " " }' | while read output;
do
usep=$(echo $output | awk '{ print }' | cut -d'%' -f1 )
partition=$(echo $output | awk '{ print }' )
if [ $usep -ge $Alert ]; then
echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)" >>"$tmpfile"
fi
done
if [ -s "$tmpfile" ] ; then
mail -s "Disk Space Warning" someone@host <"$tmpfile"
fi
rm -f "$tmpfile"
Não estou familiarizado com o utilitário spacealert
que você estava usando, então substituí mail
pelo envio do e-mail.
A propósito, acho que as instruções awk / while / read podem ser simplificadas um pouco:
tmpfile="$HOME/fs_usage_check.tmp"
echo -n "" >"$tmpfile"
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print , }' | while read partition usep ; do
if [ ${usep%%%} -ge $Alert ]; then
echo "Running out of space \"$partition ($usep)\" on $(hostname) as on $(date)" >>"$tmpfile"
fi
done
if [ -s "$tmpfile" ] ; then
mail -s "Disk Space Warning" someone@host <"$tmpfile"
fi
rm -f "$tmpfile"
Nesta forma simplificada, a variável usep
muda um pouco: ela ainda tem o sinal '%' anexado. Precisamos remover o sinal de porcentagem para fazer uma comparação numérica. O Bash tem uma expansão de parâmetro especial para remover tais sufixos que se parece com ${var%pattern}
ou, para remover o sufixo de correspondência de padrão mais longo, ${var%%pattern}
. No nosso caso, como o padrão em si é um sinal de porcentagem, o mesmo que o caractere mágico do bash, precisamos dele (como em ${usep%\%}
) ou usar o comando de correspondência mais longo (como em ${usep%%%}
).
Observe que o loop do while
está em um pipeline e, portanto, em um subshell (suponho que você esteja usando o bash ou dash ou shell similar). Assim, nenhuma de suas variáveis de ambiente sobrevive fora do loop. O arquivo temporário, é claro, sobrevive e isso faz com que seja bom sinalizar se uma mensagem deve ser enviada.