home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam  


UNIX Power Tools

UNIX Power ToolsSearch this book
Previous: 48.1 Well, What Else Could We Call It? Chapter 48
Office Automation
Next: 48.3 A Scratchpad on Your Screen
 

48.2 Online Phone and Address Lists

Here's a useful little shell script that we've used at O'Reilly & Associates. If you run it as phone , it gives you peoples' phone numbers - it searches files named phone in your home directory and in a system location. If you run it as address , it does the same thing for files named address . Lines from the system file are labeled sys> ; lines from your personal file are marked pers> . For example:

% phone tom


pers>Tom VW's mother, Barbara Van Winkel in Vermont 802-842-1212
pers>Tom Christiansen [5/10/92] 201/555-1212
sys>Flitecom (Dave Stevens, Tom Maddy) (301) 588-1212

The script uses egrep (27.5 ) to search the file; the egrep -i option means you can type tom and the script will find lines with either Tom or tom (or TOM or...). The two names for this script are both links (18.3 ) to the same file. Of course, you can adapt the script for things besides phone numbers and addresses.













test
 
touch
 


$#
 





















#!/bin/sh
# LINK BOTH THE phone AND address SCRIPTS TOGETHER; BOTH USE THIS FILE!

myname="`basename $0`"  # NAME OF THIS SCRIPT (USUALLY address OR phone)
case "$myname" in
phone|address)
    sysfile=/work/ora/$myname   # SYSTEM FILE
    persfile=${HOME?}/$myname   # PERSONAL FILE
    ;;
*) echo "$0: HELP!  I don't know how to run myself." 1>&2; exit 1 ;;
esac


if test ! -f $persfile
then touch $persfile
fi

case $# in
0)  echo "Usage: $myname searchfor [...searchfor]
    (You didn't tell me what you want to search for.)" 1>&2
    exit 1
    ;;
*)  # BUILD egrep EXPRESSION LIKE (arg1|arg2|...) FROM NAME(S) USER TYPES:
    for arg
    do
        case "$expr" in
        "") expr="($arg" ;;
        *) expr="$expr|$arg" ;;
        esac
    done
    expr="$expr)"
esac

# SEARCH WITH egrep, USE sed TO ADD sys> TO START OF FILENAMES FROM
# SYSTEM FILE AND pers> TO START OF FILENAMES FROM HOME LIST:
egrep -i "$expr" $persfile $sysfile |


sed -e "s@^$sysfile:@sys>@" -e "s@^$persfile:@pers>@"
exit

The comments in the script explain what each part does. The most interesting part is probably the for loop (44.16 ) and case statement (44.5 ) that build the egrep expression. For instance, if you type the command phone tom mary , the script builds and runs an egrep command as if you'd typed this:

% egrep -i "(tom|mary)" /u/me/phone /work/ora/phone


/u/me/phone:Tom VW's mother, Barbara Van Winkel in Vermont 802-842-1212
/u/me/phone:Tom Christiansen [5/10/92] 201/555-1212
/work/ora/phone:Flitecom (Dave Stevens, Tom Maddy) (301) 588-1212
   ...

The sed (34.24 ) command turns the pathnames from egrep into pers> and sys> .

You can install this script from the CD-ROM or you can just type it in. If you type in the script, put it in an executable file named phone . (If all users on your system will share it, your system administrator should put the script in a central directory such as /usr/local/bin .) Then make a link to it:

% chmod 755 phone


% ln phone address

- JP


Previous: 48.1 Well, What Else Could We Call It? UNIX Power Tools Next: 48.3 A Scratchpad on Your Screen
48.1 Well, What Else Could We Call It? Book Index 48.3 A Scratchpad on Your Screen

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