텍스트 줄이 포함된 파일 BOD와 이메일 주소가 포함된 파일 ADDR이 있다고 가정해 보겠습니다. BOD의 첫 번째 줄을 ADDR의 첫 번째 주소로, BODIES의 두 번째 줄을 ADDR의 두 번째 줄로,...마지막 줄까지 어떻게 보내나요?
쉘을 사용하여 쉘에서 메일을 보낼 수 있다는 것을 알고 있습니다.
TEXT | mail ADDRESS
하지만 각 행에 대해 이 작업을 어떻게 반복합니까?
답변1
다음 변수를 사용하십시오.
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[@]}"
배열의 총 행 수를 나타냅니다. 각 행은 texts
또는으로 액세스할 수 있습니다. 여기서 0부터 시작하여 위쪽으로 이동하면 지정된 파일의 행이 포함됩니다."${texts[i]}"
"${mails[i]}"
i
i+1
답변2
number=YOUR_NUMBER_OF_LINE
message=$(head -n ${number} file_wit_TEXT | tail -1)
address=$(head -n ${number} file_with_ADDRESSES | tail -1)
echo ${message} | mail ${address}