[glug-t] Re: [Fwd]: [ilug-goa] Reminder for you... (cool script)
- From: "Upendra L. Gandhi" <ulgandhi@xxxxxxxxxxxxxx>
- To: Vimal Joseph <vimalekm@xxxxxxxx>
- Date: Sun, 21 Mar 2004 11:43:36 +0530 (IST)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Ohh Thanks a lot !!
i fully agree gnu-linux flexible /-_-\
bye
*******************************************************************************
Upendra Gandhi.
>
> Hello,
>
> I remember Upendra asked for a software for reminding
> meetings. The msg attached below contains two cool'n'simple shell
> scripts that can do the job.
>
> regards,
>
> ~vimal
>
> ----- Forwarded message from "Frederick Noronha (FN)" <fred@xxxxxxxxxxxxxxx>
> -----
>
> Date: Sun, 21 Mar 2004 01:51:38 +0530 (IST)
> From: "Frederick Noronha (FN)" <fred@xxxxxxxxxxxxxxx>
> Subject: [ilug-goa] Reminder for you... (cool script)
> To: ilug-goa@xxxxxxxxxxxxxxx
> Reply-to: ilug-goa@xxxxxxxxxxxxxxx
>
> TWO INTERESTING tiny scripts below, from *Wicked Cool Shell Scripts* (Dave
> Taylor, No Starch Press, 2004, San Francisco). Both combine to implement a
> simple calendar program that help you keep track of the events. Extremely
> useful in the real world of work...
>
> The first script, *addagenda*, enables you to specify either recurring or
> one-time events. All dates are validated and saved, along with one-line
> event description, in an *.agenda* file in your home directory.
>
> For its part, the second script, *agenda*, checks all known events,
> showing which are scheduled for the current date. Useful for remembering
> birthdays, events, appointments, schedules.
>
> HOW IT WORKS: Weekly, annual and one-time events are accepted. As entries
> are added to the agenda file, their specified dates are 'normalized' and
> compressed so that 3 April becomes 3Apr, and Thursday becomes Thu. The
> *agenda* script checks for events by taking the current date and
> transforming it into three possible date string formats. It then simply
> compares each of these date strings to each line in the *.agenda* data
> file.
>
> This script, writes Dave Taylor, just "scratches the surface of this
> complex and interesting topic". It would be nice to have a look a few days
> ahead. This script could be used on a *nix box to send out systemwide
> reminders. Imagine newspaper reporters getting a reminder of what's on the
> schedule on that day. Simply have the *agenda* script on each user's
> machine point to a shared read-only .*agenda* file, and then add a call
> to the agenda script in each user's *.login* or similar file.
>
> PS: Thanks to Derek Cordeiro for the handholding in making this work!
>
> PPS: Go to http://www.intuitive.com/wicket/ and you'll "find everything
> you need to continue your journey towards becoming a Shell script Maven",
> promises author Dave Taylor taylor @ intuitive.com
>
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>
> #!/bin/sh
>
> # addagenda - Prompts the user to add a new event for the agenda script.
>
> agendafile="$HOME/.agenda"
>
> isDayName()
> {
> # return = 0 if all is well, 1 on error
>
> case $(echo $1 | tr '[[:upper:]]' '[[:lower:]]') in
> sun*|mon*|tue*|wed*|thu*|fri*|sat*) retval=0 ;;
> * ) retval=1 ;;
> esac
> return $retval
> }
>
> isMonthName()
> {
>
> case $(echo $1 | tr '[[:upper:]]' '[[:lower:]]') in
> jan*|feb*|mar*|apr*|may*|jun*) return 0 ;;
> jul*|aug*|sep*|oct*|nov*|dec*) return 0 ;;
> * ) return 1 ;;
> esac
> }
>
> normalize()
> {
> # Return string with first char uppercase, next two lowercase
> echo -n $1 | cut -c1 | tr '[[:lower:]]' '[[:upper:]]'
> echo $1 | cut -c2-3| tr '[[:upper:]]' '[[:lower:]]'
> }
>
> if [ ! -w $HOME ] ; then
> echo "$0: cannot write in your history directory ($HOME)" >&2
> exit 1
> fi
>
> echo "Agenda: The GNU/Linux Reminder Service"
> echo -n "Date of event (day mon, day month year, or dayname): "
> read word1 word2 word3 junk
>
> if isDayName $word1 ; then
> if [ ! -z "$word2" ] ; then
> echo "Bad dayname format: just specify the day name by itself." >&2
> exit 1
> fi
> date="$(normalize $word1)"
>
> else
>
> if [ -z "$word2" ]; then
> echo "Bad dayname format: unknown day name specified" >&2
> exit 1
> fi
>
> if [ ! -z "$(echo $word1|sed 's/[[:digit:]]//g')"] ; then
> echo "Bad date format: please specify day first, by day number" >&2
> exit1
> fi
>
>
> if [ "$word1" -lt 1 -o "$word1" -gt 31 ] ; then
> echo "Bad date format: day number can only be in in range 1-31" >&2
> exit 1
> fi
>
> if ! isMonthName $word2 ; then
> echo "Bad date format: unknown month name specified." >&2
> exit 1
> fi
>
> word2="$(normalize $word2)"
>
> if [ -z "$word3" ] ; then
> date="$word1$word2"
> else
> if [ ! -z "$(echo $word3|sed 's/[[:digit:]]//g')" ] ; then
> echo "Bad date format: third field should be year." >&2
> exit 1
> elif [ $word3 -lt 2000 -o $word3 -gt 2500 ] ; then
> echo "Bad date format: year value should be 2000-2500" >&2
> exit 1
> fi
> date="$word1$word2$word3"
> fi
> fi
>
> echo -n "One-line description: "
> read description
>
> # Ready to write to data file
>
> echo "$(echo $date|sed 's/ //g')|$description" >> $agendafile
>
> exit 0
>
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>
> #!/bin/bash
>
> #agenda - Scans through the user's .agenda file to see if there
> #are any matches for the current or next day.
>
> agendafile="$HOME/.agenda"
>
> checkDate()
> {
> #Create the possible default values that'll match today
> weekday=$1 day=$2 month=$3 year=$4
> format1="weekday" format2="$day$month" format3="$day$month$year"
>
> # and step through the file comparing dates....
>
> IFS="|" # the reads will naturally split at the IFS
>
> echo "On the Agenda for today:"
>
> while read date description ; do
> if [ "$date" = "$format1" -o "$date" = "$format2" -o "$date" = "$format3" ]
> then
> echo " $description"
> fi
> done < $agendafile
>
> }
>
> if [ ! -e $agendafile ] ; then
> echo "$0: You don't seem to have an .agenda file. " >&2
> echo "To remedy this, please use 'addagenda' to add events" >&2
> exit 1
> fi
>
> # Now let's get today's date...
>
> eval $(date "+weekday=\"%a\" month=\"%b\" day=\"%e\" year=\"%G\"")
>
>
>
>
> day="$(echo $day|sed 's/ //g')"
>
> checkDate $weekday $day $month $year
>
> exit 0
>
>
> To Post a message, send it to: ilug-goa@xxxxxxxxxxxxxxx
> To Unsubscribe, send a blank message to: ilug-goa-unsubscribe@xxxxxxxxxxxxxxx
> Yahoo! Groups Links
>
> <*> To visit your group on the web, go to:
> http://groups.yahoo.com/group/ilug-goa/
>
> <*> To unsubscribe from this group, send an email to:
> ilug-goa-unsubscribe@xxxxxxxxxxxxxxx
>
> <*> Your use of Yahoo! Groups is subject to:
> http://docs.yahoo.com/info/terms/
>
>
>
> ----- End forwarded message -----
>
> --
> There is no system but GNU,
> and Linux is one of its kernels
> see http://www.gnu.org/gnu/linux-and-gnu.html
> ---------------------------------------------------------------
> To unsubscribe send a mail to glug_t-request@xxxxxxxxxxxxx with
> 'unsubscribe' as subject.
>
> Website: http://glugt.linuxisle.com
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.0 (SunOS)
Comment: For info see http://www.gnupg.org
iD8DBQFAXTKVE+UCRhjPibwRAtyMAKCEtOamL1WdNF1+vVYW9n3zyqJxzwCcDA69
NWNFA8BA/MORj0NugMWE6AY=
=n/8A
-----END PGP SIGNATURE-----
---------------------------------------------------------------
To unsubscribe send a mail to glug_t-request@xxxxxxxxxxxxx with
'unsubscribe' as subject.
Website: http://glugt.linuxisle.com
- References:
- [glug-t] [Fwd]: [ilug-goa] Reminder for you... (cool script)
- From: Vimal Joseph
Other related posts:
- » [glug-t] [Fwd]: [ilug-goa] Reminder for you... (cool script)
- » [glug-t] Re: [Fwd]: [ilug-goa] Reminder for you... (cool script)
- [glug-t] [Fwd]: [ilug-goa] Reminder for you... (cool script)
- From: Vimal Joseph