- #1
hunter108
- 1
- 0
I'm trying to write what is basically a search and replace script. Full disclosure: This IS a homework assignment, and my attempt is below. It is supposed to have a usage statement, which I think is pretty solid so far. The problem is at the end where I do that actual searching and replacing. I'm just getting the 'end of file unexpected' error, which because i am spoiled in my young programming life with gcc, g++, and java compilers that neatly tell you where the problem is, I don't really know what is going wrong.
I think that error means it is looking for something it can't find, right? What? A hint in the right direction, or even a chastisement for being a newbie would be helpful.
Thanks in advance if anyone helps.
#!/bin/sh
# a shell function to print and error message and exit the script
error_and_die ()
{
echo "$@" >&2
exit 1
}
# a shell function to print and error message and a usage message and
# to exit the script
error_and_die_with_usage ()
{
echo "$@" >&2
usage
exit 1
}
# a shell function to print a usage message
usage ()
{
echo "
change-lines [-n] -s search string -r replace string files ...
-n do not backup the original file
-s search string the search for this string
-r replace string replace the search string with this string
-h print this message
" >&2
}
backup_file=TRUE
search_string=
replace_string=
while :
do
case $1 in
-n)
backup_file=FALSE
;;
-s)
if [ ! "$2" ]
then
error_and_die_with_usage "Search String not specified with -s"
fi
search_string="$2"
shift
;;
-r)
if [ ! "$2" ]
then
error_and_die_with_usage "Search String not specified with -r"
fi
replace_string="$2"
shift
;;
-h)
usage
exit 0
;;
-?)
error_and_die_with_usage "This should help!"
;;
*)
break
;;
esac
shift
done
if [ ! "$search_string" -a ! "$replace_string" -a $# -eq 0 ]
then
error_and_die_with_usage "No Search String, Replace String, or file to edit entered."
fi
if [ ! "$search_string" -a ! "$replace_string" ]
then
error_and_die_with_usage "No Search or Replace String entered.
fi
if [ ! "$search_string" -a $# -eq 0 ]
then
error_and_die_with_usage "No Search String or file to edit entered."
fi
if [ ! "$search_string" ]
then
error_and_die_with_usage "No Search String entered."
fi
if [ ! "$replace_string" -a $# -eq 0 ]
then
error_and_die_with_usage "No Replacement String or file to edit entered."
fi
if [ ! "$replace_string" ]
then
error_and_die_with_usage "No Replacement String entered."
fi
if [ $# -eq 0 ]
then
error_and_die_with_usage "No file to edit entered."
fi
# here is where I am pretty sure I am getting the error.
for file in $*
do
backup=$1
if ( backup_file == TRUE )
then
cp $backup $backup.keep
fi
sed 's/$search_string/$replace_string/g' $backup
shift
done
exit 0;
I think that error means it is looking for something it can't find, right? What? A hint in the right direction, or even a chastisement for being a newbie would be helpful.
Thanks in advance if anyone helps.
#!/bin/sh
# a shell function to print and error message and exit the script
error_and_die ()
{
echo "$@" >&2
exit 1
}
# a shell function to print and error message and a usage message and
# to exit the script
error_and_die_with_usage ()
{
echo "$@" >&2
usage
exit 1
}
# a shell function to print a usage message
usage ()
{
echo "
change-lines [-n] -s search string -r replace string files ...
-n do not backup the original file
-s search string the search for this string
-r replace string replace the search string with this string
-h print this message
" >&2
}
backup_file=TRUE
search_string=
replace_string=
while :
do
case $1 in
-n)
backup_file=FALSE
;;
-s)
if [ ! "$2" ]
then
error_and_die_with_usage "Search String not specified with -s"
fi
search_string="$2"
shift
;;
-r)
if [ ! "$2" ]
then
error_and_die_with_usage "Search String not specified with -r"
fi
replace_string="$2"
shift
;;
-h)
usage
exit 0
;;
-?)
error_and_die_with_usage "This should help!"
;;
*)
break
;;
esac
shift
done
if [ ! "$search_string" -a ! "$replace_string" -a $# -eq 0 ]
then
error_and_die_with_usage "No Search String, Replace String, or file to edit entered."
fi
if [ ! "$search_string" -a ! "$replace_string" ]
then
error_and_die_with_usage "No Search or Replace String entered.
fi
if [ ! "$search_string" -a $# -eq 0 ]
then
error_and_die_with_usage "No Search String or file to edit entered."
fi
if [ ! "$search_string" ]
then
error_and_die_with_usage "No Search String entered."
fi
if [ ! "$replace_string" -a $# -eq 0 ]
then
error_and_die_with_usage "No Replacement String or file to edit entered."
fi
if [ ! "$replace_string" ]
then
error_and_die_with_usage "No Replacement String entered."
fi
if [ $# -eq 0 ]
then
error_and_die_with_usage "No file to edit entered."
fi
# here is where I am pretty sure I am getting the error.
for file in $*
do
backup=$1
if ( backup_file == TRUE )
then
cp $backup $backup.keep
fi
sed 's/$search_string/$replace_string/g' $backup
shift
done
exit 0;