Shell循环中的Shell问题

时间:2013-04-28 07:01:50

标签: shell

我正在使用while循环来读取包含以下内容的xyz.txt文件和文件:

2 - info1 
4 - info2
6 - info3
9 - info4 

此外,我使用if条件匹配count -gt然后y值,因此它将发送电子邮件。我遇到的问题是每当它匹配if条件时它发送一个我想要的电子邮件,它应该读取文件直到结束,如果条件匹配将下一行输出存储到文件然后发送包含所有信息的文件。目前我收到了很多电子邮件。

希望我的问题很明确我认为我正在寻找返回功能一旦条件匹配它继续读取文件直到结束并存储信息。

count=`echo $line | awk '{print $3}'`
cnt=o
while read line
do
if [ "$count" -gt "$x" ]; then ---> This logic is working fine
cnt=$(( $cnt + 1)) --- > This logic is working fine
echo $line > info.txt  -----> In info.txt I want to store info in 1 go which ever matches condition.
export info.txt=$info.txt
${PERL_BIN}/perl $send_mail
fi
done < file.txt

2 个答案:

答案 0 :(得分:1)

如果您只想发送一次电子邮件,请不要调用在回路内发送邮件的Perl;将它放在循环外(循环结束后)。使用append(>>)来逐步构建文件。

count=`echo $line | awk '{print $3}'`
cnt=0   # 0 not o!
while read line
do
    if [ "$count" -gt "$x" ]; then
        cnt=$(($cnt + 1)) 
        echo $line >> info.txt
    fi
done < file.txt

if [ $cnt -gt 0 ]
then
    export info_txt=$info.txt
    ${PERL_BIN}/perl $send_mail
fi

答案 1 :(得分:0)

好。我试图抓住你想要的东西,我认为是这样的:

首先,在循环之前,删除任何旧的info.txt文件。

rm info.txt

然后,每次循环时,都会向其添加新行:

echo $line >> info.txt

注意双箭头>>。这意味着追加,而不是覆盖。

最后,在循环后发送的电子邮件。