start page | rating of books | rating of authors | reviews | copyrights

UNIX Power Tools

UNIX Power ToolsSearch this book
Previous: 48.6 Get Calendar for Any Month or Year: cal Chapter 48
Office Automation
Next: 48.8 Calendar for 132-Column Terminals or Printers
 

48.7 cal That Marks Today's Date

If you're like me and you tend to forget what day it is :-) , a calendar like the one that cal ( 48.6 ) prints doesn't help much. Here's a little shell script below that puts angle brackets around the current date. For example, if today is August 7, 1996:

% 

cal

     August 1996   S  M Tu  W Th  F  S               1  2  3   4  5  6 >7< 8  9 10  11 12 13 14 15 16 17  18 19 20 21 22 23 24  25 26 27 28 29 30 31

If you're sure that this script will never be called by another program that expects the system version, you can name this cal , too - just be sure to put it in a directory somewhere in your PATH before /usr/bin ( 8.7 ) , the system location of most versions of cal . Otherwise, give the script another name, such as cal_today .

The script puts the output of date into its command-line parameters; it adds an x first for safety (in case the date command doesn't make any output, the set command will still have arguments and won't output a list of all shell variables). The parameters look like this:

x Wed Aug 7 20:04:04 PDT 1996

and the fourth parameter, in $4 , is what the script uses:

 
   
set
      
"$@"
 
 



 #! /bin/sh # If user didn't give arguments, put > < around today's date: case $# in 0) set x `date`    # Place > < around $4 (shell expands it inside doublequotes):    /usr/bin/cal |    sed -e 's/^/ /' -e "s/ $4$/>$4</" -e "s/ $4 />$4</"    ;; *) /usr/bin/cal "$@" ;; esac

If you give any arguments, the script assumes that you don't want the current month; it runs the system cal command. Otherwise, the script pipes the system cal output into sed ( 34.24 ) . The sed expression puts a space before every line to make room for any > < at the start of a line. Then it uses two substitute commands - one for the beginning or middle, the other for the end of a line - one is guaranteed to match the current date.

- JP


Previous: 48.6 Get Calendar for Any Month or Year: cal UNIX Power Tools Next: 48.8 Calendar for 132-Column Terminals or Printers
48.6 Get Calendar for Any Month or Year: cal Book Index 48.8 Calendar for 132-Column Terminals or Printers

The UNIX CD Bookshelf Navigation The UNIX CD BookshelfUNIX Power ToolsUNIX in a NutshellLearning the vi Editorsed & awkLearning the Korn ShellLearning the UNIX Operating System