我正在创建一个脚本来检查目录中的3个文件,记录其中的行数,如果行存在则发送邮件。如果这些文件中的任何一个已经计数,我只需要发送一封邮件,我结束发送3封邮件。
对于Ex。我有这些文件
process_date.txt
thread_date.txt
child_date.txt
我正在做类似
的事情$1= process_date.txt
$2= thread_date.txt
$3= child_date.txt
if [ -f $1 ]
then
count1=`wc-l < $1`
if $count1 -ne 0 then mailx abc.com
fi
fi
if [ -f $2 ]
then
count2=`wc-l < $2`
if $count2 -ne 0 then mailx abc.com
fi
fi
if [ -f $3 ]
then
count3=`wc-l < $3`
if $count3 -ne 0 then mailx abc.com
fi
fi
答案 0 :(得分:3)
正如您所说的那样,您似乎只需要检查至少有一个文件是非空的:您不需要计算行数。在Bash中,您可以使用[[ -s file ]]
测试来准确测试file
是否存在且非空。所以你可以这样做:
#!/bin/bash
if [[ -s $1 ]] || [[ -s $2 ]] || [[ -s $3 ]]; then
mailx abc.com
fi
更一般地说,如果至少有一个作为参数提供的文件存在且非空,则可以发送邮件:
#!/bin/bash
for file; do
if [[ -s $file ]]; then
mailx abc.com
break
fi
done
您将此称为
scriptname process_date.txt thread_date.txt child_date.txt
答案 1 :(得分:1)
您可以将脚本包装在函数中,并在每return
后使用mailx
命令,如下所示:
send_one_mail() {
if [ -f "$1" ]
then
count1=$(wc -l < "$1")
if [ $count1 -ne 0 ]
then
mailx abc.com
return
fi
fi
# etc. for other conditions
}
send_one_mail process_date.txt thread_date.txt child_date.txt
答案 2 :(得分:1)
试试这个:
if [ -f $1 ]
then
count1=`wc -l < $1`
fi
if [ -f $2 ]
then
count2=`wc -l < $2`
fi
if [ -f $3 ]
then
count3=`wc -l < $3`
fi
if [ $count1 -ne 0 -o $count2 -ne 0 -o $count3 -ne 0 ]
then
mailx abc.com
fi