You are on page 1of 3

Bash Shell Script 範例 - 生日賀卡產生器

Cd Chen, 恆逸資訊
不知道您是否與我有相同的困擾,就是朋友很多但常常忘了在適當的時候給予關懷。尤其在朋友的生日
時,常常忘了給他說聲生日快樂??

如果您與我有相同的煩惱,那您可以善加利用本文件所介紹的 Shell Script,幫助您自動的寄出生日賀卡


的電子郵件給您的好朋友們。

前言
聲明
當您閱讀與使用本文件所提及之內容時,即表示您同意遵守下面的規定:

1. 茲同意轉載時,著名來源與出處,並願意通知作者,以便取得最新且無錯誤的版本。

2. 本文件提及的所有程式源碼,您可以自由的使用、複製、改寫,上述的情況下無須通知原作者。

3. 本文件中的程式源碼可能包含著數個臭蟲 (Bug),使用上您必須要自己仔細檢查。因為臭蟲而損及您
的系統,作者皆不負任何責任。

內容
這個系統包含了三個元件:

• birthday-mail.sh: 這是主要用來找出今日壽星,並寄出 email 的 Shell Script。

• birthday.data: 這個是儲存朋友資料的資料庫。

• birthday.email: 這個檔案則是生日賀卡電子郵件的內容。

其中,birthday-mail.sh 可以儲存於任何地方,我建議您可以放置到 $HOME/bin/ 目錄中,以便可


以直接執行這個 Shell Script; 另外,birthday.data 與 birthday.email 必須儲存於
$HOME/var/birthday/ 目錄中。如果沒有 $HOME/var/birthday/ 目錄,請您手動建立一個。

以下是上述三個元件詳細介紹:

Shell Script 的內容


首先,是 birthday-mail.sh 這個 Shell Script:

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.email 兩個檔案的路徑。如果您要使用這個 Shell Script,您


必須要先檢查是否有這兩個檔案存在。
❷ 定義今日的日期。
❸ 從 birthday.data 中找出今日壽星資料。本行中,先找出非註解 (Comment) 的資料後,再搜尋今
日壽星。
❹ 使用 for 迴圈處理每一個壽星資料。
❺ 找出壽星的電子郵件位址。
❻ 判斷該電子郵件位址是否為空字串,若是則跳到下一個迴圈; ,否則繼續處理後續的動作。
❼ 產生壽星的全名。
❽ 變更電子郵件中的全名欄位後,寄出!!

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: 出生日期,也必須是兩位數。

• EMAILADDRESS: 朋友的 Email 位址。

birthday.email 檔案的內容
另外,為了讓 birthday-mail.sh 能夠順利運作,您也必須要產生一個名為 birthday.emil 的檔
案。其內容請參考下面的例子:

Dear __FULLNAME__:

Happy Birthday To You. :)

Best Regards,
Cd Chen.

您可以使用 vi 或其他文書編輯軟體,產生上述的信件內容。如果您需要使用朋友的全名作為信件的內
容,您必須使用 __FULLNAME__ 作為朋友全名的代號。

結論
如果您覺得這個 birthday-mail.sh 功能還不是很好,您可以繼續擴充其功能,使其更符合您的需求。

這也是玩 Linux 的最大樂趣!! 最後,祝福您可以把 Linux 玩得更快樂!!