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
-