[Chapter 48] 48.2 Online Phone and Address Lists
Author: Jerry Peek, Tim O'Reilly & Mike Loukides
Date: 1998-10-23T15:55:23Z

#

| Chapter 48 Office Automation |

## 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

48.1 Well, What Else Could We Call It? |  | 48.3 A Scratchpad on Your Screen