CSCI 157: UNIX Power Utilities and Shell Programming
Laboratory Assignment 8
1. TURN-IN a hard copy of the following:
- On all homework please include
- Your Name
- Course Number
- Date
- ecst login name
- No questions from the book this lab
- Use ANY language such as perl, python, ruby, tcl, expect, bash, csh, tcsh, ksh, sh (as appropriate)
- TURN-IN printout of script
- Have a soft copy on your ecst account so you can demo it
Reminder Script
- Write a script that will email you reminders before and on different dates
- Script will read from a file of the following format
17 5 Joebobs Birthday
4 7 Sallys Birthday
12 1 So and So's Anniversary
|
- Your file can have special requirements like tab delimited
or that single digits must be written as double digits "05" , "02" ,
etc.
- The first column is the day and the second column is the month.
- Script will email 2 reminders
- One reminder is emailed 3 days before the date to be reminded of.
- One reminder should be mailed the day of the date.
- Assume that this script gets ran automatically every day by
cron or some other method so all you have to do is have it send an
email if the current day is the same as one of the dates in the file or
if it is 3 days earlier.
- Emailing 3 days earlier gets tricky when the day crosses
month barriers. For instance, 3 days before April 1st is March 29th.
You should consider this and see if you can come up with a solution for
this part.
- Script should include the date of the event and the name of the event in the email message that is generated.
- To email in a script you can used the mail command, (this can be done on the command line or in a script) for example:
mail toddlisonbee@fastmail.fm <<END
Subject: Joebobs Birthday March 17th
Just a Reminder, Joebobs Birthday is Marth 17th
END
- Here is an example of comparing days in bash
if [ `date +%d` -eq "24" ]; then echo "today is the 24th" ; else echo "today is not the 24th"; fi
- Related scripts in /user/s/toddj/bin that might help you out: readfromfile, strings, integers
- These are format codes for the date command from the Linux Man Pages.
For example:
date +'%d %H'
Would print the day of the month (01..31) followed by the hour (00..23)
FORMAT controls the output. The only valid option for the second form
specifies Coordinated Universal Time. Interpreted sequences are:
%% a literal %
%a locale’s abbreviated weekday name (Sun..Sat)
%A locale’s full weekday name, variable length (Sunday..Saturday)
%b locale’s abbreviated month name (Jan..Dec)
%B locale’s full month name, variable length (January..December)
%c locale’s date and time (Sat Nov 04 12:02:33 EST 1989)
%C
century (year divided by 100 and
truncated to an integer)
[00-99]
%d day of month (01..31)
%D date (mm/dd/yy)
%e day of month, blank padded ( 1..31)
%F same as %Y-%m-%d
%g the 2-digit year corresponding to the %V week number
%G the 4-digit year corresponding to the %V week number
%h same as %b
%H hour (00..23)
%I hour (01..12)
%j day of year (001..366)
%k hour ( 0..23)
%l hour ( 1..12)
%m month (01..12)
%M minute (00..59)
%n a newline
%N nanoseconds (000000000..999999999)
%p locale’s upper case AM or PM indicator (blank in many locales)
%P locale’s lower case am or pm indicator (blank in many locales)
%r time, 12-hour (hh:mm:ss [AP]M)
%R time, 24-hour (hh:mm)
%s seconds since ‘00:00:00 1970-01-01 UTC’ (a GNU extension)
%S second
(00..60); the 60 is necessary to accommodate a leap sec-
ond
%t a horizontal tab
%T time, 24-hour (hh:mm:ss)
%u day of week (1..7); 1 represents Monday
%U week number of year with Sunday as first day of week (00..53)
%V week number of year with Monday as first day of week (01..53)
%w day of week (0..6); 0 represents Sunday
%W week number of year with Monday as first day of week (00..53)
%x locale’s date representation (mm/dd/yy)
%X locale’s time representation (%H:%M:%S)
%y last two digits of year (00..99)
%Y year (1970...)
%z RFC-822 style numeric timezone (-0500) (a nonstandard extension)
%Z time
zone (e.g., EDT), or nothing if no time zone
is deter-
minable
By default, date pads numeric fields with zeroes. GNU date recognizes
the following modifiers between ‘%’ and a numeric directive.
‘-’ (hyphen) do not pad the field ‘_’ (underscore) pad the field
with spaces