bash shell script 範例 - birthday

3
Bash Shell Script 範例 - 生日賀卡產生器 Cd Chen, 恆逸資訊 不知道您是否與我有相同的困擾,就是朋友很多但常常忘了在適當的時候給予關懷。尤其在朋友的生日 時,常常忘了給他說聲生日快樂?? 如果您與我有相同的煩惱,那您可以善加利用本文件所介紹的 Shell Script,幫助您自動的寄出生日賀卡 的電子郵件給您的好朋友們。 前言 聲明 當您閱讀與使用本文件所提及之內容時,即表示您同意遵守下面的規定: 1. 茲同意轉載時,著名來源與出處,並願意通知作者,以便取得最新且無錯誤的版本。 2. 本文件提及的所有程式源碼,您可以自由的使用、複製、改寫,上述的情況下無須通知原作者。 3. 本文件中的程式源碼可能包含著數個臭蟲 (Bug),使用上您必須要自己仔細檢查。因為臭蟲而損及您 的系統,作者皆不負任何責任。 內容 這個系統包含了三個元件: birthday-mail.sh: 這是主要用來找出今日壽星,並寄出 email Shell Scriptbirthday.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 <[email protected]> 1

Upload: cdchen

Post on 06-Jun-2015

787 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: bash Shell Script 範例 - Birthday

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 <[email protected]>

1

Page 2: bash Shell Script 範例 - Birthday

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,[email protected]

2

Bash Shell Script 範例 - 生日賀卡產

生器

Page 3: bash Shell Script 範例 - Birthday

在這個檔案中,您可以使用 # 做為註解符號,扣除掉註解以外的每一行,皆代表一個朋友的資料。其格

式為 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 玩得更快樂!!

3

Bash Shell Script 範例 - 生日賀卡產

生器