| Previous | Table of Contents | Next |
Listing 22.3 Complete Listing of the addperson Script
1 #!/bin/sh
2 # Name: addperson
3 # Desc: add a person addressbook
4 # Args: -n <name>
5 # -e <email>
6 # -a <postal address>
7 # -p <phone number>
8
9 # initialize the variables
10
11 PATH=/bin:/usr/bin
12 MYADDRESSBOOK=$HOME/addressbook
13 NAME=""
14 EMAIL=""
15 ADDR=""
16 PHONE=""
17
18 # create a function to remove the : from user input
19
20 remove_colon() { echo "$@" | tr ':' ' ' ; }
21
22 if [ $# -lt 1 ] ; then
23
24 # this is interactive mode
25
26 # enable erasing input
27
28 stty erase '^?'
29
30 # prompt for the info
31
32 printf "%-10s " "Name:" ; read NAME
33 printf "%-10s " "Email:" ; read EMAIL
34 printf "%-10s " "Address:" ; read ADDR
35 printf "%-10s " "Phone:" ; read PHONE
36
37 else
38
39 # this is noninteractive mode
40
41 # initialize a variable for the usage statement
42
43 USAGE="'basename $0' [-n name] [-e email] [-a address]
⇒[-p phone]"
44
45 # scan the arguments to get the info
46
47 while getopts n:e:a:p:h OPTION
48 do
49 case $OPTION in
50 n) NAME="$OPTARG" ;;
51 e) EMAIL="$OPTARG" ;;
52 a) ADDR="$OPTARG" ;;
53 p) PHONE="$OPTARG" ;;
54 \?|h) echo "USAGE: $USAGE" >&2 ; exit 1 ;;
55 esac
56 done
57 fi
58
59 NAME="'remove_colon $NAME'"
60 EMAIL='remove_colon $EMAIL'"
61 ADDR="'remove_colon $ADDR'"
62 PHONE="'remove_colon $PHONE'"
63
64 echo "$NAME:$EMAIL:$ADDR:$PHONE" >> "$MYADDRESSBOOK"
65
66 exit $?
This script first initializes its variables (lines 1116). You set the internal variables that store the user information to null in order to avoid conflicts with exported variables in the users environment.
The next step is to create the following function (line 20):
remove_colon() { echo "$@" | tr ':' ' ' ; }
You use this function to make sure that the users input doesnt contain any colons.
You then check to see whether any arguments are given (line 22). If this is so, you enter interactive mode (lines 2336); otherwise, you enter noninteractive mode (lines 3856).
In interactive mode, you prompt for each piece of information and read it in. Before you produce the first prompt, you issue a stty command (line 28) to make sure the user can erase any mistakes made during input.
In noninteractive mode, you use getopts to obtain the information provided on the command line. In this section you also initialize the variable USAGE to contain the usage statement for this command.
After the information has been obtained, you call the remove_colon function for each variable (lines 5962). Because the user can potentially specify information that contains colons, skipping this step could corrupt the address book and confuse the showperson script.
Finally you update the address book and exit.
An example of using the script in interactive mode is
$ ./addperson Name: James Kirk Email: jim@enterprise-a.starfleet.mil Address: 1701 Main Street James Town Iowa UFP Phone:
Here you provided only the name, email address, and postal address for Jim Kirk. When you look up James Kirk in the address book, you find that this field is empty:
$ ./showperson Name: James Kirk Email: jim@enterprise-a.starfleet.mil Address: 1701 Main Street James Town Iowa UFP Phone:
You can do the same addition using the noninteractive form:
$ ./addperson -n "James Kirk" -e jim@enterprise-a.starfleet.mil \ -a "1701 Main Street James Town Iowa UPF"
Notice that on the command line you need to quote the entries that contain spaces.
Occasionally, you need to delete a person from the address book. In this section, I will look at a script called delperson that deletes people from the address book.
Deleting a person from the address book is a harder task because you have to make sure that those people you really want to delete are deleted. The two main tasks you need to perform are
Because the delete operation can potentially remove information from the address book, you have to be extra careful about making backups and working on copies of the original address book.
To simplify prompting and printing error messages, this script uses the shell function library libTYSP.sh that was introduced in Chapter 21.
The basic flow of the script is
For each of these steps, you use a function to make sure that the operations performed succeeded.
The complete delperson script is given in Listing 22.4 (the line numbers are provided for your reference).
| Previous | Table of Contents | Next |