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
-