В команде if
вы должны заключать переменные в двойные кавычки. И проверьте, присвоено ли этим переменным что-то:
if [ "${chk}" -gt "${threshold}" ]; then
Для отправки почты вы можете использовать команду echo
следующим образом
echo "$(hostname): Alert Fileystem ${fs} is above ${threshold}%."|mail user@host
Если вам нужна одна почта для всех, вы можете использовать что-то вроде:
>/tmp/output
for fs in $(df -hk | awk '{print $6}' | sed '1 d'); do
chk=$(df -hk ${fs} | sed '1 d' | awk '{print $5}' | awk -F\% '{print $1}')
if [ "${chk}" -gt "${threshold}" ]; then
echo "$(hostname): Alert Fileystem ${fs} is above ${threshold}%." >>/tmp/output
fi
done
cat /tmp/output|mailx -s "Subject" username@host
EDIT1 :И еще один момент, команда df -hk
немного ерунда, вы хотите в то же время результат в удобочитаемом формате ('h' )и быть в килобайтах (' к')