Cd Chen, 恆逸資訊
不知道您是否與我有相同的困擾,就是朋友很多但常常忘了在適當的時候給予關懷。尤其在朋友的生日
時,常常忘了給他說聲生日快樂??
前言
聲明
當您閱讀與使用本文件所提及之內容時,即表示您同意遵守下面的規定:
1. 茲同意轉載時,著名來源與出處,並願意通知作者,以便取得最新且無錯誤的版本。
2. 本文件提及的所有程式源碼,您可以自由的使用、複製、改寫,上述的情況下無須通知原作者。
3. 本文件中的程式源碼可能包含著數個臭蟲 (Bug),使用上您必須要自己仔細檢查。因為臭蟲而損及您
的系統,作者皆不負任何責任。
內容
這個系統包含了三個元件:
• birthday.data: 這個是儲存朋友資料的資料庫。
• birthday.email: 這個檔案則是生日賀卡電子郵件的內容。
以下是上述三個元件詳細介紹:
1 #!/bin/sh
2 #
3 # Author: Cd Chen <cdchen@cdchen.idv.tw>
1
Bash Shell Script 範例 - 生日賀卡產
生器
4 # Version: 1.0
5
6 data_file="$HOME/var/birthday/birthday.data" ❶
7 email_file="$HOME/var/birthday/birthday.email"
8
9 today_month="$(date +%m)"
10 today_day="$(date +%d)"
11 today_date="$today_month,$today_day" ❷
12
13 all_friends="$(grep -v '^#' $date_file | grep $today_date)" ❸
14
15 for friend in $all_friends ❹
16 do
17 email_addr="$(echo $friend | cut -d , -f 5)" ❺
18 if [ -z $email_addr ]; then ❻
19 continue
20 fi
21
22 first_name="$(echo $friend | cut -d , -f 1)"
23 last_name="$(echo $friend | cut -d , -f 2)"
24 full_name="$first_name $last_name" ❼
25
26 sed "s/__FULLNAME__/$full_name/g" $email_file | \ ❽
27 mail -s "Happy birthday to you.." $email_addr
28 done
29
30 exit 0
birthday.data 檔案的內容
您必須要準備一個資料檔,以便讓 birthday-mail.sh 執行的時候能夠比對此資料庫。這個資料檔必
須命名為 birthday.data。以下是我的 birthday.data 的內容:
# Comment Strings.
# FirstName,LastName,Month,Day,EmailAddress
Cd,Chen,05,16,cdchen@cdchen.idv.tw
2
Bash Shell Script 範例 - 生日賀卡產
生器
在這個檔案中,您可以使用 # 做為註解符號,扣除掉註解以外的每一行,皆代表一個朋友的資料。其格
式為 CSV 檔案的格式,因此您可以使用類似像 Excel 等軟體,來維護朋友的資料庫。
每一行資料中,使用 , 作為區隔欄位的符號,每一個欄位分別為:
• FIRSTNAME: 名字。
• LASTNAME: 姓氏。
• MONTH: 出生月份,必須為兩位數,亦即未滿兩位數之月份,需自動補上 0。
• DAY: 出生日期,也必須是兩位數。
birthday.email 檔案的內容
另外,為了讓 birthday-mail.sh 能夠順利運作,您也必須要產生一個名為 birthday.emil 的檔
案。其內容請參考下面的例子:
Dear __FULLNAME__:
Best Regards,
Cd Chen.
您可以使用 vi 或其他文書編輯軟體,產生上述的信件內容。如果您需要使用朋友的全名作為信件的內
容,您必須使用 __FULLNAME__ 作為朋友全名的代號。
結論
如果您覺得這個 birthday-mail.sh 功能還不是很好,您可以繼續擴充其功能,使其更符合您的需求。