두 파일을 비교하여 값보다 큰지 확인합니다.

두 파일을 비교하여 값보다 큰지 확인합니다.

30분마다 디스크 사용량에 대해 경고해 달라는 요청이 있습니다. 문제는 동일한 경고가 반복해서 전송되지 않도록 최근 출력에서 ​​이전 경고를 확인해야 한다는 것입니다.

#!/bin/bash

#export [email protected]
export [email protected];
#df -PH | grep -vE '^Filesystem|none|cdrom'|awk '{ print $5 " " $6 }' | while read output;
df -PH | grep -vE '^Filesystem|none|cdrom|swdepot'|awk '{ print $5 " " $6 }' > diskcheck.log;

#diskcheck is current output whereas disk_alert is previous runned output

if [ -s "$HOME/DBA/monitor/log/disk_alert.log" ]; then
#Getting variables and compare with old
  usep=$(awk '{ if($1 > 60) print $0 }' $HOME/DBA/monitor/diskcheck.log | cut -d'%' -f1)
  usep1=$(awk '{ if($1 > 60) print $0 }' $HOME/DBA/monitor/log/disk_alert.log | cut -d'%' -f1)
  partition=$(cat $HOME/DBA/monitor/diskcheck.log | awk '{ print $2 }' )
else
   cat $HOME/DBA/monitor/diskcheck.log > $HOME/DBA/monitor/log/disk_alert.log
fi
**echo $usep;
echo $usep1;**
if [ "$usep" -ge 60 ]; then
        if [ "$usep" -eq "$usep1" ]; then
                mail=$(awk '{ if("$usep" == "$usep1") print $0 }' $HOME/DBA/monitor/diskcheck.log)
                echo "Running out of space \"$mail ($usep%)\" on $(hostname) as on $(date)" | mail -s "Disk Space Alert: Mount $mail is $usep% Used" $maillist;
        fi
fi

출력(오류):

66 65 85 66
66 65 85 66
disk_alert.sh: line 19: [: 66
65
85
66: integer expression expected

문제는 (66 65 85 66)을 의미하는 단일 행에 값을 저장하는 변수 ($usep 및 $usep1)에 있다고 생각하지만

66
65
85
66

그러면 다음만 있습니다:

if [ "$usep" -ge 60 ]; then 
       this condition will pass.

답변1

이 줄을 연구해 봅시다:

usep=$(awk '{ if($1 > 60) print $0 }' $HOME/DBA/monitor/diskcheck.log | cut -d'%' -f1)

이 상황에는 $0가치가 있습니다 66 65 85 66. 따라서 cut -d'%'명령은 %값에서 구분 기호를 찾을 수 없으며 있는 그대로 반환합니다.

그것은해야한다:

usep=$(awk '{ if($1 > 60) print $1 }' $HOME/DBA/monitor/diskcheck.log

$1첫 번째 필드를 가리키는


이 줄에도 동일하게 적용됩니다.

usep1=$(awk '{ if($1 > 60) print $0 }' $HOME/DBA/monitor/log/disk_alert.log | cut -d'%' -f1)

관련 정보