# Help with UNIX Programming



## Diego94 (Apr 19, 2012)

I have an assignment that I am in the dark on. Any help to where I need to get started would be appreciated... Don't have to tell me the answer right off but I have no clue on where to even start.

In this assignment, you will demonstrate your ability to write simple shell scripts. This is also the closest thing to a final exam that this course has, so it will challenge you to pull together a variety of lessons from throughout the course.
Every now and then, I find myself with a large number of files that have inapppriate _extensions_ (the set of characters in the file name after the last '.') that need to be changed. For example, a complicated C++ program, developed by someone on a Windows machine where file names are not case sensitive, might have a number of files ending in ".CPP" and ".H". Not only are these inconsistent with the conventional ".cpp" and ".h" endings, but they can pose a real issue with compiling the code. If the code contains statements like
#include "Utilities.h" and the file name is "Utilities.H", the code will not compile on *nix systems, though it might on a Windows system.

In this assignment you will be working towards a script that can be used to fix this and similar problems by giving a desired extension and then a group of files that we wish renamed to use that extension instead of whatever final extension they have at the moement, e.g.
chExt.sh cpp *.CPP *.CppchExt.sh h *.H

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

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 so that it has the desired extension and store the result in a second shell variable (e.g., $newName). 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.


----------



## shannon08 (Jul 30, 2008)

http://mij.oltrelinux.com/devel/unixprg/


----------

