Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 从多个结果中grep一个单词_Linux_Bash_Shell - Fatal编程技术网

Linux 从多个结果中grep一个单词

Linux 从多个结果中grep一个单词,linux,bash,shell,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 '{ pr

我正在尝试编写一个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\u警报:

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

$ 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
处理这个问题的最佳方式是什么?
我需要基于文件系统的逻辑还是挂载在文件系统上的逻辑。

不要重新发明轮子。有一些工具可以为您的客户实现这一点。试试monit,例如:


好的,monit很好,如果您需要另一种选择,请看一看——df实用程序的包装器,以验证每个分区是否超过阈值。至少它看起来非常接近于您开始在bash脚本中实现的内容,但它是用perl编写的,并且具有整洁简单的安装布局。随时可用的工具

-问候


PS披露者-我是工具作者

您想要的输出是什么样子的?读取输出时不应该是吗?我需要检查每个文件系统使用的空间,并比较使用的空间是否大于/workspace/OSE/scripts/fs\u警报中定义的阈值如果任何文件系统使用的空间超过文件上定义的阈值,则发送警报。
$ 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