编写一个 bash shell 脚本来获取朋友生日的提醒
认为
Birthday Date Friend's name
08-02-2014 : Prashant
08-15-2014 : prabhat
09 -16 -2014 : Aks
12-30-2014 : Bks
对于单身生日,我可以使用crontab
Step 1: create a file vi birthday.sh
Step 2:
echo " Birthday alerts: today is Prashant 's Birthday Wish!! him " |mail -s "b-alert" [email protected]
第三步:授予执行权限
chmod u+x birthday.sh
步骤 4:使用 cron 运行脚本birthday.sh
00 00 02 08 * /home/user/birthday.sh
但怎么办呢?为了获得多个生日的警报,我可以创建每个生日的脚本,但我认为最好不要这样做。我只想要一个脚本来获得
生日到来时所有生日提醒
答案1
根据要求,下面是一个有效的 bash 脚本。我在每个用户“记录”中使用“=”符号字段分隔符,并且空格是记录分隔符。请注意,为了完整性,我添加了虚构的电子邮件。
#
!/bin/bash
#
DATE=$(date '+%m-%d-%Y')
bdays='[email protected] [email protected] [email protected] [email protected]'
for i in $bdays
do
bday=$(echo $i | awk -F= '{print $1}')
name=$(echo $i | awk -F= '{print $2}')
email=$(echo $i | awk -F= '{print $3}')
[[ $DATE = $bday ]] && {
echo " Birthday alerts: today is $name 's Birthday Wish!! " |mail -s "b-alert" $email
}
done
要从文件中读取生日,请将 bdays='....' 替换为:
bdays=$(cat Birthday)
“生日”文件内容将采用相同的格式,全部在一行上:
[email protected] [email protected] [email protected] [email protected]
答案2
如果这是一个需要编写 shell 脚本的作业,请查看其他答案。但如果您想获得生日或其他任何定期警报,您可以使用该calendar
命令,该命令包含在大多数 Unix 系统中。
在 Linux 上:
$ mkdir ~/.calendar
$ echo -e "Jul 30\tMother's Birthday" >> ~/.calendar/calendar
$ echo -e "08/02\tPrasant's Birthday" >> ~/.calendar/calendar
$ echo -e "Aug 15\tPrabhat's Birthday" >> ~/.calendar/calendar
$ # note that you need to have a tab between the date and the event description
$ calendar
Jul 30 Mother's Birthday
你可以把
0 2 * * * calendar|mail -s "b-alert" [email protected]
在你的 crontab 中,每天早上 2 点运行(或者只是calendar
,因为cron
会将命令的输出邮寄给你)。在某些系统上,calendar
默认情况下每天清晨都会为每个人运行。
您可以在每次登录时calendar
输入要运行的内容。~/.bash_profile
答案3
这是狡猾的伪代码的答案。您可以用任何您喜欢的语言来实现。
具有格式一致的日期(称为“生日”)的文件。
today=GET_TODAYS_DATE()
While not end of file birthdays
do
read from file DATE NAME
if today=DATE then
mail address with "Today is NAME's birthday"
endif
endwhile
每天午夜过后 1 分钟在 cron 中运行它。