Embora o loop seja executado somente uma vez [duplicado]

3

Estou escrevendo um script simples para verificar o uso do disco no meu sistema. O loop while deve imprimir somente partições com 85% ou mais. Existem duas partições acima de 90%, mas apenas a primeira partição está sendo impressa para a saída.

Código:

#!/bin/bash
admin="[email protected]"
threshold="85"

df -h | tail -n +2 | awk '{print $1 " " $5}' | sed 's/.$//' | while read i; do
  part=$(echo $i | awk '{print $1}')
  util=$(echo $i | awk '{print $2}')
    if [ $util -ge $threshold ]; then
      echo $part is ${util}% full. An email has been sent to your administrator.
      mail -s "Critical: $part is ${util}% full. Clear space immeadiately!" $admin
    fi
done

Saída:

/dev/mapper/rootvg-root is 92% full. An email has been sent to your administrator.

Mas, você pode ver que / dev / mapper / rootvg-apps também está 98% cheio:

/dev/mapper/rootvg-apps            20G   20G  445M  98% /apps
/dev/mapper/rootvg-tmp            6.0G  2.4G  3.7G  39% /tmp
/dev/mapper/rootvg-var_log        6.0G   71M  6.0G   2% /var/log
/dev/xvda1                        497M  142M  356M  29% /boot
    
por N.M.D 31.08.2016 / 15:58

1 resposta

0

Eu acho problema com sua saída df -h .

Tente com df -Ph

Atualização:

Como na página man, -P refere-se ao formato de saída POSIX

-P, --portability
    use the POSIX output format

E, se suas partições tiverem mais tamanho e ao mesmo tempo processar texto com seu comando (sem -P ), a saída de linha esperada virá em duas linhas.

Expectativa (Exemplo):

/dev/mapper/rootvg-tmp/tmp1   86
/dev/mapper/rootvg-tmp/tmp2   90
/tmp   90

Saída real (exemplo):

/dev/mapper/rootvg-tmp/tmp1
86
/dev/mapper/rootvg-tmp/tmp2
90
/tmp   90

Portanto, neste caso, sua condição no script não corresponderá às duas primeiras partições, pois '{print $2}' não será nenhum e $util -ge $threshold será falso.

HTH

    
por 31.08.2016 / 16:27