如何以字符串形式获取 df -h 命令的所有内容

如何以字符串形式获取 df -h 命令的所有内容

我想要一个 CRON 作业,如果磁盘空间超过 80%,它会调用 Java 程序发送邮件。

与此同时,我还想发送df -h命令的内容。我所做的是在 bash 中创建一个变量,如下所示:

DISK_SPACE = ($(df -h))

我将其传递给我的 java 程序,如下所示:

java com.myproject.alerting.DiskSpaceAkert $DISK_SPACE

我得到的不是命令的整个输出df -h,而是它的部分输出。如果这是我的原始输出:

Filesystem      Size  Used Avail Use% Mounted on
udev            7.9G     0  7.9G   0% /dev
tmpfs           1.6G   17M  1.6G   2% /run
/dev/sda1        29G  5.1G   24G  18% /
tmpfs           7.9G     0  7.9G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock

我只得到Filesystem Size Used我的 Java 参数。

如何发送整个输出?

答案1

您可以使用 bash,而不是使用 Java。

#!/bin/bash
[email protected]
quota_exceeded=80
df -h | grep -vE 'hostname_or_IP_address:/mount/point|tmpfs|cdrom|Used' | awk '{ print $5 " " $1 }' | while read output; do 
status=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 ) 
echo $status
partition=$(echo $output | awk '{ print $2 }' ) 
if [ $status -ge $quota_exceeded ]; then 
  echo  "Alert: Almost out of disk space $status" 
  df -h | mail -s "Alert: out of disk space $status" $admins_mail
fi 
done

或一张内衬:

#!/bin/bash
df -Ph $f |awk 'NR >1{gsub("%","",$0);print }'| awk -v subject="$subject" '{if($(NF-1)>80){print "mailx -s disk quota exceeded 80% of space in "$NF  " [email protected] |sh"} else{print "No disk space issue exists"}}'| sed "s/out/'out/g" |sed "s/.* /&'  /g"

答案2

result=`command` 或者 result=$(command) 两者都将命令的输出分配给结果变量。

相关内容