Couple other bash tips to help with more robust code. The main improvement I learned from the previous link is the trap function. This function lets you cleanup when specific system signals get sent from the OS, like INT (what gets sent to a program when Ctrl+c is typed) and the TERM signal. A great example is:
trap “rm -f $lockfile; exit” INT TERM EXIT
In this case a lockfile is being removed just before closing a bash script. You can get a full list of all the different system signals with the kill -l command.
The other major bash tool that I have used without ever really understanding what it did is the eval expression. If you have ever written a sysinit configuration script, you know that you use eval to basically load/set variables from other subscripts or external files. The reason eval does this is explained here. The quick explanation is that eval forces bash to evaluate a second time any code reference passed to it. So setting bash variables in-line is as easy as:
eval $(LANG=C grep -F “DEVICE=” ifcfg-$i)
One last bash builtin that may come in handy for some, the shopt function sets and displays bash built-in extended capabilities. See the link for the man page with some examples.
Overall, I am consistently amazed at the power and flexibility of the Linux command line.