
Useful Elements for bash Scripts
|
221
Troubleshooting a Simple Script
Let’s perform some surgery on a script that is supposed to delete its argument (a file
or a directory) but has a few problems:
admin@server1:~$ cat delete
#!/bin/bash
if rm $1
then
echo file $1 deleted
else
if rmdir $1
then
echo directory $1 deleted
fi
fi
The script is intended to delete the file passed as an argument using rm, and to print
a message if it succeeds. If rm fails, the script assumes the argument refers to a direc-
tory and tries rmdir instead.
Here are some results:
admin@server1:~$ ./delete hello2
file hello2 deleted
admin@server1:~$ ./delete hello2
rm: cannot remove `hello2': No such file or directory
rmdir: `hello2': No such file or directory
admin@server1:~$ mkdir hello3
admin@server1:~$ ./delete hello3
rm: cannot remove `hello3': Is a directory
directory hello3 deleted
admin@server1:~
Using these error messages, let’s try to fix the script. First, we’ll use I/O redirection
to save results to log and error files, which we can review in our copious free time.
Next, we’ll catch the return value of the rm command to generate a success or fail-
ure message. We’ll also capture the current date and time to include in the output
log:
admin@server1:~$ cat removefiles
#!/bin/bash
# removefiles deletes either files or directories
echo "$0 ran at" $(date) >> delete.log
if rm $1 2>> delete-err.log
then
echo "deleted file $1" >> delete.log ...