shell 如果grep有结果,则发送电子邮件

cbwuti44  于 2023-01-26  发布在  Shell
关注(0)|答案(1)|浏览(116)

我正在尝试编写一个简单的脚本,如果“grep”带有结果,则发送带有结果的电子邮件。但是,我还希望在没有拒绝的情况下发送电子邮件

#! /bin/bash

FILE=$(find . /opt/FIXLOGS/l51prdsrv* -iname "TRADX_*.log" -type f -exec grep -F 103=16 {} /dev/null \; )>> Rejects.txt

if [ "$FILE" == true ]
then
    mailx -s "Logs $(date +%d-%m-%y)" "email" < Rejects.txt
    rm -f Rejects.txt
elif [ "$FILE" == null ]
then 
    echo "No Rejects" >> Rejects.txt
    mailx -s "Logs $(date +%d-%m-%y)" "email" < Rejects.txt
    rm -f Rejects.txt
fi
o4tp2gmn

o4tp2gmn1#

null是一个字符串,而不是像其他语言中那样的空引用。true也是一个字符串(除非它是 commandtrue,但在您的比较中不是这种情况)。
如果你想测试一个文件是否存在,你可以使用[[ -f "$FILE" ]],但是,即使grep不匹配任何东西,这个文件也会存在,因为当你把它设置为输出目标时,bash会自动创建这个文件,你真正需要的是-s,它测试这个文件是否存在,并且大小是否大于0。

#!/bin/bash
find . /opt/FIXLOGS/l51prdsrv* -iname "TRADX_*.log" -type f -exec grep -F 103=16 {} /dev/null \; >> Rejects.txt

if [[ -s Rejects.txt ]] ; then
 : # grep wrote stuff into the file
else
 : # file is empty so grep found nothing
fi

相关问题