Today a small hint that can save you a lot of debugging time when writing shell scripts. If you start your (bash) shell script with
set -u -e
unset parameters won't expand to nothing (
-u) and the script ends immediately when one command fails (
-e) unless it is part of a test (
||, etc., see bash(1)).
If you want to debug your shell script, you either insert echo commands throught your script, or you can just insert
set -v -x
at the top. This will turn on verbose mode (
-v) in which bash will print the input lines as they are read. The execution trace (
-x) mode will print the commands after expansion but before execution, so you can check if the command is invoked the way you intended.