Best Practices --------------- A couple of Bash best practices summarized in a single page. Note that most of the -o options have a shorter variant. Both are listed on this page. All-in-one:: set -euo pipefail if [[ "${DEBUG-0}" == "1" ]]; then set -x; fi Note: to enable debug mode, run your script with ``DEBUG=1 ./my-script.sh`` Exit as soon as one command fails:: set -e set -o errexit Fail when accessing unset variables:: set -u set -o nounset Fail when any command from a pipeline fails:: set -o pipefail Optional debugging from argument:: if [[ "${DEBUG-0}" == "1" ]]; then set -o xtrace; fi if [[ "${DEBUG-0}" == "1" ]]; then set -x; fi # Call with DEBUG=1 ./script.sh Use double brackets ``[[ ]]`` for conditions:: [[ 1 < 2 ]] && echo "1 is less than 2" Why ? It supports ``<>``, ``&&``, ``||``, grouping expressions with ``( )``, pattern matching ``[[ $name = *c* ]]`` and regular expression ``[[ $name =~ ^Ali ]]`` Get the current script path:: SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"