Os principais problemas que você tem aqui são
-
fsExclude
é uma matriz, para obter todos os elementos, você precisa de${array[@]}
. Em qualquer caso, a opção-x
precisa de tipos de sistemas de arquivos, não de dispositivos. -
Um erro de sintaxe no seu comando
awk
, você queriaawk '{print $5}'
Sem o
print
,awk
terá a expressão$5
que avalia paratrue
se existir um campo 5 e, portanto, imprimirá todas as linhas com pelo menos 5 campos. -
Se eu entendi seu objetivo, parece que você deseja comparar a porcentagem atual com o valor de
fsUsed
. No entanto, seu comando cria um arquivo chamadofsUsed
e imprime a saída dedf
. O que você queria eraif [ "$(df -x $fsExclude | awk '$5' | sed '2p')" -gt "$fsUsed" ]
O
$()
é chamado de substituição de comando e é expandido para o saída de qualquer comando que você executou. Isso é o que você quer comparar com o valor defsUsed
e, para obter esse valor, você precisa do$
. -
Você tem
$WarnEMail
entre aspas simples, isso significa que está sendo tratado como uma string literal e não como uma variável. Tente isso:mail -s "WARNING: Almost out of disk space %" "$WarnEmail" < dfFile.tmp
-
Seu comando
df
retornará várias linhas, mas você está executando uma única comparação, que não funcionará. Você precisará verificar cada linha da saída dedf
:
Então, você também está fazendo isso de uma maneira desnecessariamente complexa. Por que não algo assim:
#!/bin/bash
fsExclude="/proc|/dev/floppy|/dev/cdrom" #Exclusions from df file system
fsUsed=15 #percent to watch for
WarnEmail=root #email for warning message
problem=0;
df | grep -v "$fsExclude" |
while read line
do
## Check the percentage, send the mail if at least
## one mount point's percentage is > $fsUsed
if [[ $(grep -oE '[0-9]+%' <<<"$line" | tr -d '%') -gt $fsUsed ]]
then
## I'm not sure if 'command | mail' works and I don't have a system
## I can test it on. If it doesn't, use a file as you did before.
df -h | mail -s "WARNING: Almost out of disk space %" "$WarnEmail"
## No need to rpocess any more lines, exit the while loop
break;
fi
done