Here’s some things you should start most bash scripts with:
#!/bin/bash set -e set -x set -o pipefail set -u TMPDIR=$(mktemp -d) trap 'rm -rf $TMPDIR' EXIT
Explanations of the lines:
#!/bin/bash
The shebang line is a unix convention that allows scripts to specify their interpreter. Since this is a bash script, we tell it to run this file with bash.
set -e
Exit immediately if any command fails. Makes it easy to spot when a script did not complete, and prevents things further down the line from doing the wrong thing because they were only partially setup.
set -x
Print each command as it’s run. It’s fantastically useful debug output, though some production scripts should have this disabled.
set -o pipefail
Exit with failure if any substage of a pipeline fails. This is about commands chained together with a pipe; e.g. If your grep command fails, the execution will fail, rather than simply outputting nothing to the next stage of the pipeline.
set -u
Makes referencing unset variables an error.
Further explaination of the above three can be found in the Bash Reference Manual entry on Set.
TMPDIR=$(mktemp -d) trap 'rm -rf $TMPDIR' EXIT
Create a scratch dir, automatically delete it when you’re done. It’s often useful to comment out the trap line during debugging.