This is part of a series of posts which should aid anyone writing Bash scripts to make them more robust.

This post shows you how you can guard against unset variables.

Bash doesn’t provide any sort of checking for unset variables by default.  You may have something similar to the following piece of code:

#!/bin/bash
#Script is called delete.sh
DEL=$1
rm -rf ~/$DEL

You would use it similar to this: `bash delete.sh tmp`, which would delete ~/tmp.  Imagine if you forgot to add the “tmp” on the end…POOF!  That’s your home directory gone!

You should get into the habit of using the Bash option “nounset”, otherwise known as “set -u”.  If you put that at the top of your script and run the command without any arguments, you’ll get something like this:

$ bash delete.sh
delete.sh: line 3: $1: unbound variable

This is somewhat similar to a runtime error in Python or Perl and could be very annoying, but at least you’ve saved your home directory, or another critical location on your computer!

As a side note, if “set -u” or “set -o nounset” is specified at the top of the script and the script exists because of an error, it will exit with an exit status of 1.  In a later post I will explain how to use the `trap` statement to catch this error.

Tagged on:         

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>