Time-stamp: <01/01/27 02:09:21 kawasan>


名称
bd

用途
誕生日通知ソフトです。
最初の作成動機が、誕生日だっただけなんですけどね。(^^;
年間の記念日を登録しておけば当日メールにてお知らせしてくれます。
file : ~/bin/bd
#!/usr/bin/perl
# time-stamp: <99/08/24 15:50:56 kawasan>
# Time-stamp: <1999-09-23 15:32:13 kawasan>
#
# 起動すると今日の日付の情報を表示
# データは、$pathを、使用してます

# Setting's
$path = "~/.bd.txt";
$tfile = "/tmp/bdtmpfile$$";

# Tool's
$cat = "/bin/cat";
$rm = "/bin/rm";
$mail = "/usr//bin/mail";
$command = "/bin/grep";
$nkf = "/usr/bin/nkf";

# 0/1 = Normal/debug
$debug = 0;

# 第1引数があれば出力を指定のemail先にも送信する
# $#ARGVは、コマンドラインの引数-1の値が格納されている
# $ARGV[0]は、最初の引数が格納
# $0に、コマンド名が格納
$email = "";
if ($#ARGV == 0) {
    $email = $ARGV[0];
}

# これは、ローカル時間(ゆえに、日本時間)
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
    localtime(time);

if ($debug != 0) {
    print "sec ", $sec, "\n";
    print "min ", $min, "\n";
    print "hour ", $hour, "\n";
    print "mday ", $mday, "\n";
    print "mon ", $mon, "\n";
    print "year ", $year, "\n";
    print "wday ", $wday, "\n";
    print "yday ", $yday, "\n";
    print "isdst ", $isdst, "\n";
}

$para = sprintf("%02d/%02d\t", $mon+1, $mday);
system("$command '$para' $path | $nkf > $tfile");

open BDFILE, "<$tfile" or die "Can't open: $!\n";
$outline = ;
close BDFILE or die "Can't close: $!\n";

if ($outline) {
    print $outline;

    if ($email) {
	system("$cat $tfile | $mail -s BdInfo $email");
	print "Sending email to  $email\n";
    }
}

system("$rm $tfile");
file : ~/.bd.txt
01/01
01/02
01/03	よっちー
01/04
01/05
01/06
01/07
01/08
01/09
01/10
01/11
01/12
01/13
01/14
01/15
01/16
01/17
01/18
01/19
01/20
01/21
01/22
01/23
01/24
01/25	あっこちん
01/26
01/27
01/28
01/29
01/30
01/31
02/01
02/02
02/03
02/04
02/05
02/06
02/07
02/08
02/09	Nak, MuraK
02/10
02/11
02/12
02/13
02/14
02/15
02/16
02/17	まりちゃん
02/18	Si
02/19
02/20
02/21
02/22
02/23
02/24
02/25
02/26
02/27
02/28	Ika
02/29
dummy
dummy
03/01
03/02
03/03
03/04
03/05	ひめ
03/06
03/07
03/08
03/09
03/10
03/11
03/12
03/13
03/14	じじぃ
03/15
03/16
03/17
03/18
03/19	がんちゃん
03/20
03/21
03/22
03/23
03/24
03/25
03/26
03/27
03/28
03/29
03/30
03/31	ほのか
04/01
04/02
04/03
04/04
04/05
04/06
04/07
04/08
04/09
04/10
04/11	ごんぞう, Aka
04/12
04/13
04/14
04/15
04/16
04/17
04/18	めぐみ
04/19
04/20
04/21
04/22
04/23
04/24
04/25
04/26	かべぞう
04/27
04/28
04/29
04/30
dummy
05/01
05/02
05/03
05/04
05/05
05/06
05/07
05/08
05/09
05/10
05/11
05/12
05/13
05/14	さとぴー
05/15
05/16
05/17
05/18
05/19
05/20
05/21
05/22
05/23
05/24
05/25
05/26
05/27
05/28
05/29
05/30
05/31
06/01
06/02
06/03
06/04
06/05
06/06
06/07
06/08
06/09
06/10	しんちゃん
06/11
06/12
06/13
06/14
06/15
06/16
06/17	じゅんな
06/18
06/19
06/20	Gozi
06/21
06/22
06/23
06/24
06/25
06/26
06/27
06/28
06/29
06/30
dummy
07/01
07/02	かよさん
07/03
07/04
07/05
07/06
07/07
07/08
07/09
07/10
07/11
07/12
07/13
07/14
07/15	浅間神社の御祭り
07/16
07/17
07/18	じょーじママ, のどのど
07/19
07/20
07/21
07/22
07/23
07/24
07/25
07/26
07/27
07/28
07/29
07/30
07/31
08/01
08/02
08/03
08/04
08/05
08/06
08/07
08/08
08/09
08/10
08/11
08/12
08/13
08/14
08/15
08/16
08/17
08/18
08/19
08/20
08/21
08/22
08/23
08/24
08/25
08/26
08/27	なおみ
08/28
08/29
08/30
08/31
09/01	はるちゃん
09/02	ゆだちん
09/03
09/04	まっちゃん
09/05
09/06
09/07	さちえ
09/08
09/09
09/10
09/11
09/12
09/13
09/14
09/15
09/16	あきこ
09/17
09/18
09/19
09/20
09/21
09/22	のりちゃん
09/23
09/24
09/25
09/26	つむじ
09/27
09/28
09/29
09/30
dummy
10/01
10/02
10/03
10/04
10/05
10/06
10/07
10/08
10/09
10/10	はむ太郎, かんちゃん
10/11
10/12
10/13
10/14
10/15
10/16
10/17	かみー
10/18
10/19
10/21
10/22
10/23
10/24
10/25
10/26
10/27
10/28
10/29
10/30
10/31
11/01
11/02
11/03
11/04
11/05
11/06
11/07
11/08
11/09
11/10
11/11
11/12
11/13	さる
11/14	のぶぶー
11/15
11/16
11/17
11/18
11/19
11/20	ひろみ
11/21
11/22
11/23	ふじごん
11/24
11/25
11/26
11/27	みちさん
11/27
11/28
11/30
dummy
12/01
12/02	なおなお
12/03
12/04
12/05
12/06
12/07
12/08
12/09
12/10
12/11
12/12
12/13
12/14
12/15
12/16
12/17
12/18
12/19
12/20
12/21
12/22
12/23
12/24	かみー
12/25
12/26
12/27
12/28
12/29
12/30
12/31

解説
ソースを見ればわかるとおもいますが、今日の日付を算出して指定のファイルを、grepしてます。
本当はperl自体にgrepがあるのでそれを使えばいいんだけど、いーや、
「志を低くして動けばよし!」
ということでsystem命令でgrepしてます。(^^;)

指定のファイルなんですが、こちらは記述に形式がありまして、
「1日を1行で表現すること」です。
さらに、1行の記述ルールを下記の様にすることでgrepに引っかかる様にしてます。

ex.(4/1で誕生日の場合です)
04/01 [TAB] 日本太郎
04/01は、月をゼロサプレスで2桁で、記述し、'/'で区切って、日をゼロサプレスで2桁で記述します。
[TAB]は、TABコードです。
日本太郎は、人名のとこですが、 記述はなんでも受付ます。

ex.(4/2で誕生日でない場合です)
04/02
※要は、日付部しか記述していない。

なんでこんなことしてるかといいますと、取り合えず、1年分の日付があった方がいいな。
じゃ、どうやって誕生日の検出をしようか?うーん。[TAB]を、 入れて識別できる様にすれば、
grepでも検出できるから。そーしよう。と、なりました。
かなりいい加減ですね。(^^;)

説明が長引きましたが、そーこうしてgrepの結果として文字が存在すれば、その日は
誕生日として断定され、その文字が標準出力に表示されます。
また、起動の際に引数を指定してあるとそれをメールアドレスとしてメールを送信します。

使い方

通常動作時
bd

メール送信する動作時
bd hoge@hoge.jp
ですね。

で、いちいち毎日起動する訳はないので、以下の記述をcrontabに入れています。
00 09 * * * $HOME/bin/bd hoge@hoge.jp 1> /dev/null 2> /dev/null


戻る