[![在此处输入图像描述][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}'