需要在单独的行中输出 - Shell 脚本

需要在单独的行中输出 - Shell 脚本

我编写了这个脚本,用于在磁盘空间超过 90 时记录电子邮件。请帮助我在单独的行中获取输出。这是我的代码:

#!/bin/bash

errortext=""

EMAILS="[email protected]"


for line in `df | awk '{print$6, $5, $4, $1} ' `
do

# get the percent and chop off the %
percent=`echo "$line" | awk -F - '{print$5}' | cut -d % -f 1`
partition=`echo "$line" | awk -F - '{print$1}' | cut -d % -f 1`

# Let's set the limit to 90% when alert should be sent
limit=90

if [[ $percent -ge $limit ]]; then
    errortext="$errortext $line"
fi
done

# send an email
if [ -n "$errortext" ]; then
echo "$errortext" | mail -s "NOTIFICATION: Some partitions on almost 
full"         $EMAILS
fi

答案1

不要尝试将输出保存在变量中,并且在不需要时不要尝试迭代命令的输出。

#!/bin/bash

mailto=( [email protected] [email protected] )
tmpfile=$( mktemp )

df | awk '0+$5 > 90' >"$tmpfile"

if [ -s "$tmpfile" ]; then
    mail -s 'NOTIFICATION: Some partitions on almost full' "${mailto[@]}" <"$tmpfile"
fi

rm -f "$tmpfile"

如果有任何行的百分比超过 90%,这会将输出的相关行邮寄df到数组中列出的地址。mailto0+$5强制awk将第五个字段解释为数字。-s如果文件不为空,则对文件的测试成功。mktemp创建一个临时文件并返回其名称。

相关内容