grep来自多个结果的单个单词

时间:2014-05-30 15:49:26

标签: linux bash shell

我正在尝试编写一个shell脚本来监视文件系统。脚本逻辑是, 对于df -H命令中的每个文件系统,读取文件系统阈值文件并获取临界阈值警告阈值。根据条件,它将发送通知。

这是我的剧本:

#!/bin/sh
df -H | grep -vE '^Filesystem|none|boot|tmp|tmpfs' | awk '{ print $5 " " $6 }' | while read $output
do
echo $output
fsuse=$(echo $output | awk '{ print $1}' | cut -d'%' -f1  )
fsname=$(echo $output | awk '{ print $2 }' )
server=`cat /workspace/OSE/scripts/fs_alert|grep -w $fsname|awk -F":" '{print $2}'`
fscrit=`cat /workspace/OSE/scripts/fs_alert|grep -w $fsname|awk -F":" '{print $3}'`
fswarn=`cat /workspace/OSE/scripts/fs_alert|grep -w $fsname|awk -F":" '{print $4}'`
serenv=`cat /workspace/OSE/scripts/fs_alert|grep -w $fsname|awk -F":" '{print $5}'`
if [ $fsuse -ge $fscrit ]; then
   message="CRITICAL:${server}:${serenv}:$fsname Is $fsuse Filled"
   _notify;
elif [ $fsuse -gt $fswarn ] && [ $fsuse -lt $fscrit ]; then
    message="WARNING: $fsname is $fsuse Filled"
    _notify;
else
    echo "File system space looks good"
fi
done

以下是/workspace/OSE/scripts/fs_alert

/:hlpdbq001:90:80:QA:dba_mail
/dev/shm:hlpdbq001:90:80:QA:dba_mail
/boot:hlpdbq001:90:80:QA:dba_mail
/home:hlpdbq001:90:80:QA:dba_mail
/opt:hlpdbq001:90:80:QA:dba_mail
/opt/security:hlpdbq001:90:80:QA:dba_mail
/tmp:hlpdbq001:90:80:QA:dba_mail
/var:hlpdbq001:90:80:QA:dba_mail
/u01/app:hlpdbq001:90:80:QA:dba_mail
/u01/app/oracle:hlpdbq001:90:80:QA:dba_mail
/oratrace:hlpdbq001:90:80:QA:dba_mail
/u01/app/emagent:hlpdbq001:90:80:QA:dba_mail
/gg:hlpdbq001:90:80:QA:dba_mail
/workspace:hlpdbq001:90:80:QA:dba_mail
/dbaudit:hlpdbq001:90:80:QA:dba_mail
/tools:hlpdbq001:90:80:QA:dba_mail

我的问题是当脚本试图从crit_va文件系统的文件中获取warn_val/u01时,我得到了三个结果。如何一次获取/过滤一个文件系统?

$ df -H|grep /u01
/dev/mapper/datavg-gridbaselv    53G   12G   39G  24% /u01/app
/dev/mapper/datavg-rdbmsbaselv   53G  9.6G   41G  20% /u01/app/oracle
/dev/mapper/datavg-oemagentlv    22G  980M   20G   5% /u01/app/emagent

处理此问题的最佳方法是什么? 我是否需要基于FilesystemMounted on的逻辑。

2 个答案:

答案 0 :(得分:0)

不要重新发明轮子。有一些工具可以为你做到这一点。以monit为例:

http://sysadminman.net/blog/2011/monit-disk-space-monitoring-1716

答案 1 :(得分:0)

好吧,monit很好),如果你需要替代方案,请查看df-check - df实用程序的包装器,以便在每个分区的基础上验证未超过阈值。至少它看起来非常接近你在bash脚本中开始实现的内容,但它是用perl编写的,并且具有简洁的安装布局。准备使用工具。

- 问候

PS披露者 - 我是工具作者