while ループは一度だけ実行されます。

while ループは一度だけ実行されます。

私のシステムのディスク使用量を確認するための単純なbashスクリプトを書いています。 whileループはパーティションの85%以上を印刷する必要があります。 90%以上の場合、2つのパーティションがありますが、最初のパーティションのみが出力に印刷されます。

パスワード:

#!/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

出力:

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

しかし、/dev/mapper/rootvg-appsも98%いっぱいになったことがわかります。

/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

ベストアンサー1

私の考えでは、出力に問題があるようですdf -h

試してみてくださいdf -Ph

修正する:

マニュアルページによると、-PPOSIX出力フォーマットを参照しています。

-P, --portability
    use the POSIX output format

パーティション長が長く、-Pテキスト処理にコマンド(なし)を使用すると、予想される行出力は2行に分割されます。

予想(例):

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

実際の出力(例):

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

したがって、この場合、スクリプトの条件は一致せずfalseなので、最初の2つのパーティションと'{print $2}'一致しません$util -ge $threshold

ファタイ

おすすめ記事