![需要在单独的行中输出 - Shell 脚本](https://linux22.com/image/133149/%E9%9C%80%E8%A6%81%E5%9C%A8%E5%8D%95%E7%8B%AC%E7%9A%84%E8%A1%8C%E4%B8%AD%E8%BE%93%E5%87%BA%20-%20Shell%20%E8%84%9A%E6%9C%AC.png)
我编写了这个脚本,用于在磁盘空间超过 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
到数组中列出的地址。mailto
将0+$5
强制awk
将第五个字段解释为数字。-s
如果文件不为空,则对文件的测试成功。mktemp
创建一个临时文件并返回其名称。