用于显示使用超过 5% 磁盘存储的文件系统的 Shell 脚本

用于显示使用超过 5% 磁盘存储的文件系统的 Shell 脚本

[![在此处输入图像描述][1]][1]

grep 命令在此脚本中如何工作?我有这么多文件系统(参考图片),我想以这样的方式执行脚本,使其根据基于文件系统的警报条件工作][1]][1]

这是我的剧本

ALERT=5 
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 , $1 }' > sample.txt 
while read line; do 
  var1=$(echo $line | awk '{ print $1}' | cut -d '%' -f1 ) 
  echo $var1 
  var2=$(echo $line | awk '{ print $2 }' ) 
  echo $var2 
  if [ "$var1" > $ALERT ]; then 
     echo "Alert: Almost out of disk space" 
  fi 
done < sample.txt

我想显示磁盘使用率超过 5% 的文件系统,但执行脚本后得到的文件系统磁盘使用率为 4%。

Filesystem Size Used Avail Use% Mounted 
on overlay 880G 28G 808G 4% / 
tmpfs 126G 0 126G 0% /dev 
tmpfs 126G 0 126G 0% /sys/fs/cgroup 
/dev/sdb1 880G 28G 808G 4% /etc/hosts 
shm 64M 996K 64M 2% /dev/shm 
/dev/sda3 215G 21G 183G 10% /home/cg/root 
tmpfs 126G 0 126G 0% /proc/scsi 
tmpfs 126G 0 126G 0% /sys/firmware 
4 overlay   
Alert: Almost out of disk space 4 /dev/sdb1 Alert: Almost out of disk space 2 shm 
Alert: Almost out of disk space 10 /dev/sda3 Alert: Almost out of disk space

答案1

  • 您似乎只想测量本地文件系统,在这种情况下-l使用df
  • 要跳过 df header,一个简单的sed 1d就足够了
  • 在awk中使用printf进行输出格式化
  • awk 可以自行处理字符串到数字的转换。假设第五列是带百分号的数字,$5+0则仅将其转换为数字

有了这些,你的干净脚本将是

df -lh | sed 1d | awk '{ if( $5+0  >5) printf "ALERT FOR %s at %d%%\n",$1, $5}'

相关内容