使用 IF 和 echo 命令输出打印/邮件

Posted

技术标签:

【中文标题】使用 IF 和 echo 命令输出打印/邮件【英文标题】:output print/mail with IF and echo command 【发布时间】:2021-04-16 09:07:48 【问题描述】:

我想在特定文件夹中搜索 10 个最大文件大小,如果 omscb* 文件超过阈值,它将向人们发送邮件以检查和删除这些文件。 假设如果 10 个文件中有 3 个文件从 omscb* 开始。我正在使用 AIX 。 例如 :- omscb1 5GB omscb2 7GB omscb2 3GB 和其他 7 个文件不是以 omscb 开头的。 因此,我在下面编写了脚本,但输出仅来自最后一个文件,即 omscb2 3gb,因为根据排序,它正在覆盖当前记录。请建议如何在输出中获取所有文件名。

THRESHOLD="5"
LOG=/home/log1.txt
cd /home/var/log
du -sg *|sort -r|head -10 | awk 'print $1"\t"$2' | while read LINE; do
PERC1=`echo $LINE |awk 'print $1'`
PERC2=`echo $LINE |awk 'print $2'`
if [ $PERC1 -gt  $THRESHOLD ] || [ "$PERC2" = omscb* ] ;then
#echo $PERC1 $PERC2 \n >> $LOG
fi
done

print $LOG

=============== 提前致谢。

【问题讨论】:

你应该安装GNU!find;默认AIX!find 的功能非常有限。 【参考方案1】:

似乎大部分逻辑都可以封装到一个 awk 语句中

du -sg /home/var/log |sort -r|head -10 | awk -v thresh="5" -v logfile="/home/log1.txt" ' if ($1 > thresh | $2 ~ "omscb")  print $1" "$2 >> logfile;close(logfile)  '

将排序后的 du 命令的输出通过管道传输到 awk 中,并将日志文件和阈值作为变量传递给 awk 语句中使用。如果第一个空格分隔的字段大于变量 thresh,或者第二个字段模式匹配“omscb”,则将由空格分隔的第一个和第二个字段打印到日志文件并关闭它。

【讨论】:

以上是关于使用 IF 和 echo 命令输出打印/邮件的主要内容,如果未能解决你的问题,请参考以下文章

Linux下mail/mailx命令发送邮件

使用 if else 和复选框的电子邮件模板的语法错误

在脚本中使用 telnet 命令发送邮件

如何正确输出连接表?

如何发送 HTML 电子邮件,其中包含 php echo 命令?

linux的学习系列 6---打印文件和发送邮件