while 루프는 한 번만 실행됩니다.

while 루프는 한 번만 실행됩니다.

내 시스템의 디스크 사용량을 확인하기 위해 간단한 bash 스크립트를 작성 중입니다. while 루프는 파티션의 85% 이상만 인쇄해야 합니다. 90% 이상의 경우 두 개의 파티션이 있지만 첫 번째 파티션만 출력에 인쇄됩니다.

암호:

#!/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텍스트 처리를 위해 명령( 없이)을 사용하는 경우 예상되는 줄 출력이 두 줄로 분할됩니다.

예상(예):

/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이므로 처음 두 파티션과 '{print $2}'일치하지 않습니다 $util -ge $threshold.

화타이

관련 정보