假设我有一个包含文本行的文件BOD和一个包含电子邮件地址的文件ADDR。如何将BOD的第一行发送到ADDR的第一个地址,将BODIES的第二行发送到ADDR的第二个地址,...直到最后一行?
我知道您可以使用以下命令在外壳中发送邮件
TEXT | mail ADDRESS
但是如何对每一行重复执行此任务?
使用以下变量,
text_file="$1"
mail_file="$2"
lines_in_text=$( cat "$text_file" | wc -l )
lines_in_addr=$( cat "$mail_file" | wc -l )
line_num=1
您可以编写以下例程:
send_mail() {
while [[ "$line_num" -le "$lines_in_text" ]]; do
text_line=$( sed -n "${line_num}p" "$text_file" )
mail_line=$( sed -n "${line_num}p" "$mail_file" )
echo "$text_line" | mail "$mail_line"
line_num=$(( line_num + 1 ))
done
}
send_mail
然后,您可以使用脚本,如下所示:
./script BOD ADDR
编辑:执行此操作的另一种方法是将每个文本和地址文件读入单独的数组,从而每个索引包含相应文件的一行,如下所示:
#!/bin/bash
IFS=$'\n' read -d '' -r -a texts < "$1"
IFS=$'\n' read -d '' -r -a mails < "$2"
send_mail_alternate() {
for (( i = 0; i < "${#texts[@]}"; i++ )); do
echo "${texts[i]}" | mail "${mails[i]}"
done
}
send_mail_alternate
在这里,创建的两个数组是texts
和mails
。"${#texts[@]}"
表示array中的总行数texts
,并且每一行都可以通过"${texts[i]}"
或访问"${mails[i]}"
,其中i
从0开始向上移动,其中包含i+1
指定文件的行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句