''#!/usr/bin/env bash'' - Use ''bash'' found in the environment path. Protects against not knowing where user's ''bash'' is installed. ====== set options ====== ''set options -xeuo'' Commonly used options: * ''-x'': turns on debug output, logging each command as it is executed * ''-e'': causes the script to exit on most command failures (non-zero exit codes) * ''-u'': treats unset variables and parameters other than the special parameters @ or * as an error when performing parameter expansion * ''-o pipefail'': causes the script to exit if a command in a pipeline fails * use a + to unset them if necessary Many more options available: https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html ====== Variables ====== * ''$@'' - All of the arguments as individual strings * ''"$*"'' - All of the arguments as a single string * ''$#'' - The number of arguments * ''$1..n'' - Where n is an integer, the nth argument in the list * ''$0'' - The command name * ''$?'' - The last exit code * ''$IFS'' - Internal/input field separator (defaults to combo of space, newline and tab) ====== Functions ====== Declaring a function (needs to happen before use): ''function { ... do things ... }'' - or - ''() { ... do things ... }'' * Nothing ever goes inside parentheses. * Passed parameters can be accessed with ''$1''..''$n''. ====== Tips ====== * [[https://stackoverflow.com/a/16496491|Use getopts to parse commandline options]].