Hi all,
I am coming up with shell scripts for a class assignment. There are a total of three and the first two function properly. I cannot get the third one to work.
I will post the directions then the shell scripts chExt1.sh, chExt2.sh, chExt.sh. 1 2 and 3 respectively.
You'll be working on this assignment in 3 stages.
Create a directory ~/UnixCourse/scriptAsst.
Within that directory, create a shell script, chExt1.sh taking two parameters:
the desired file extension
the name of a single file to be renamed with that extension
The first line of your shell script must be
#!/bin/sh
or
#!/bin/csh
This requirement applies to all the scripts you will develop in this assignment.
For example, (assuming you have cd'd into your scriptAsst directory,
echo ants > aardvark.CPP
./chExt1.sh cpp aardvark.CPP
should rename the file "aardvark.CPP" to "aardvark.cpp".
date > bongo.dat
./chExt1.sh backup bongo.dat
should rename the file "bongo.dat" to "bongo.backup".
Hint: Try to get the current name of the file into a shell variable (e.g., $oldName). Then use a sed command to rewrite that value to remove the file extension, and store the result in a second shell variable (e.g., $newName). Then append the desired new extension onto that. Finally, issue the actual command to rename the file. There are probably other ways to achieve this effect as well, but all of the info you need for the approach suggested here has been covered in the Lecture Notes.
To make the script a bit more robust, it would be good if it checked to see if the file that we want to rename actually exists.
Within the same directory, create a shell script, chExt2.sh taking the same two parameters, that behaves the same as the first script for files that exists, but for files that do not exist, prints a message
fileName: No such file
where fileName is the name of the file given in the second parameter.
No other messages should be issued, including error messages from commands invoked by your script.
Finally, within the same directory, create a shell script, chExt.sh that takes one or more parameters, where the first is a desired extension and the remainder are names of files to be renamed. For each file in the command line, this script should rename the file, as above, if the file exists or print the error message described in the previous step if the file does not exist.
For example,
ls > crocodile.foo
echo bark > dingo.bar
./chExt.sh dat crocodile.foo bogusName.foo dingo.bar
should result in crocodile.foo being renamed crocodile.dat, an error message "bogusName.foo: No such file", and dingo.bar being renamed dingo.dat.
Here are my scripts
chExt1.sh
Code:
#!/bin/sh
extension="$1"
shift
for fname in "${@}" ; do
if test -r "$fname" ; then
echo Changing: "$fname"
mv "$fname" "${fname%.*}.$extension"
else
filename="$fname"
echo $filename: No such file
fi
done
chExt2.sh
Code:
#!/bin/sh
extension="$1"
shift
for fname in "${@}" ; do
if test -r "$fname" ; then
newname="${fname%.*}.$extension"
if test "$fname" = "$newname" ; then
:
else
mv -f "$fname" "${fname%.*}.$extension"
fi
else
echo "$fname": No such file
fi
done
chExt.sh
Code:
#!/bin/sh
extension="$1"
shift
for fname in "${@}" ; do
mv "$fname" "${fname%.*}.$extension"
if test -r "$fname" ; then
newname="${fname%.*}.$extension"
if test "$fname" = "$newname" ; then ##This is the test to prevent mv from sit\
ing an error
:
else
mv -f "$fname" "${fname%.*}.$extension"
fi
else
echo "$fname": No such file
fi
done
Thanks for any and all help!