I am going through a book on Linux programming. One of the examples does
not work. I was wondering if someone could take a look at the script and
see why it doesn't work. The program is exactly like the example from the
book, in fact I downloaded it from www.wrox.com the
publisher of the book Beginning Linux Programming. The part that doesn't
work is the list_tracks section.
Thank You,
Keith
[EMAIL PROTECTED]
#!/bin/sh
# Very simple example shell script for managing a CD collection.
# Copyright (C) 1996 Wrox Press.
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
# This program is distributed in the hopes that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details.
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.
# 675 Mass Ave, Cambridge, MA 02139, USA.
# A few global variables we need. Put them here for clarity.
menu_choice=
current_cd=
title_file=title.cdb
tracks_file=tracks.cdb
temp_file=/tmp/cdb.$$
trap 'rm -f $temp_file' EXIT
get_return() {
echo -e Press return \c
read x
return 0
}
get_confirm() {
echo -e Are you sure? \c
while true
do
read x
case $x in
y | yes | Y | Yes | YES )
return 0;;
n | no | N | No | NO )
echo
echo Cancelled
return 1;;
*) echo Please enter yes or no ;;
esac
done
}
set_menu_choice() {
clear
echo Options :-
echo
echo a) Add new CD
echo f) Find CD
echo c) Count the CDs and tracks in the catalog
if [ $cdcatnum != ]; then
echo l) List tracks on $cdtitle
echo r) Remove $cdtitle
echo u) Update track information for $cdtitle
fi
echo q) Quit
echo
echo -e Please enter choice then press return \c
read menu_choice
return
}
insert_title() {
echo $* $title_file
return
}
insert_track() {
echo $* $tracks_file
return
}
add_record_tracks() {
echo Enter track information for this CD
echo When no more tracks enter q
cdtrack=1
cdttitle=
while [ $cdttitle != q ]
do
echo -e Track $cdtrack, track title? \c
read tmp
# case $tmp in
# ) continue
# ;;
# *,*)echo Sorry, no commas allowed
# continue
# ;;
# esac
cdttitle=${tmp%%,*}
if [ $tmp != $cdttitle ]; then
echo Sorry, no commas allowed
continue
fi
if [ -n $cdttitle ]; then
if [ $cdttitle != q ]; then
insert_track $cdcatnum,$cdtrack,$cdttitle
fi
else
cdtrack=$((cdtrack-1))
fi
cdtrack=$((cdtrack+1))
done
}
# This allows adding of a new CD
add_records() {
# Prompt for the initial information
echo -e Enter catalog number \c
read tmp
cdcatnum=${tmp%%,*}
echo -e Enter title \c
read tmp
cdtitle=${tmp%%,*}
echo -e Enter type \c
read tmp
cdtype=${tmp%%,*}
echo -e Enter artist/composer \c
read tmp
cdac=${tmp%%,*}
# Check that they want to enter the information
echo About to add new entry
echo $cdcatnum $cdtitle $cdtype $cdac
# If confirmed then append it to the titles file
# get_confirm insert_title $cdcatnum,$cdtitle,$cdtype,$cdac
if get_confirm ; then
insert_title $cdcatnum,$cdtitle,$cdtype,$cdac
add_record_tracks
else
remove_records
fi
return
}
find_cd() {
if [ $1 = n ]; then
asklist=n
else
asklist=y
fi
cdcatnum=
echo -e Enter a string to search for in the CD titles \c
read searchstr
if [ $searchstr = ]; then
return 0
fi
grep $searchstr $title_file $temp_file
# set $(wc -l $temp_file)
# linesfound=$1
linesfound=$(wc -l $temp_file)
case $linesfound in
0)echo Sorry, nothing found
get_return
return 0
;;
1);;
2)echo Sorry, not unique.
echo Found the following
cat $temp_file
get_return
return 0
esac
# if [ $linesfound = 0 ]; then
#echo Sorry, nothing found
#get_return return 0
# fi
# if [ $linesfound != 1 ]; then
#echo Sorry, not unique.
#echo Found the following ...
#cat $temp_file
#get_return return 0
# fi
# cdcatnum=$(cut -f 1 -d , $temp_file)
IFS=,
read cdcatnum cdtitle cdtype cdac $temp_file
IFS=
# if [ $cdcatnum = ]; then
if [ -z $cdcatnum ]; then
echo Sorry, could not extract catalog field from $temp_file
#cat $temp_file
get_return
return 0
fi
# cdtitle=$(cut -f 2 -d , $temp_file)
# cdtype=$(cut -f 3 -d , $temp_file)
# cdac=$(cut -f 4 -d , $temp_file)
echo
echo Catalog number $cdcatnum