Strict mode (common preamble)
set -euo pipefail
IFS=$'\n\t'
Variables & defaults
| Syntax | Meaning |
${VAR:-default} | Use default if unset or empty |
${VAR:=default} | Assign default if unset or empty |
${VAR:?msg} | Exit with msg if unset or empty |
${#VAR} | String length |
${VAR:offset:len} | Substring |
Tests
[[ -f path ]] # regular file
[[ -d path ]] # directory
[[ -z "$s" ]] # empty string
[[ "$a" == "$b" ]] # string equality
Redirection
| Syntax | Purpose |
cmd >file | stdout truncate |
cmd >>file | stdout append |
cmd 2>&1 | tee log | stderr merged, copy to file |
cmd <file | stdin from file |
exec {fd}<file | Open file descriptor |
Loops & functions
for f in *.txt; do echo "$f"; done
while read -r line; do … done < file
foo() {
local x=1
echo "$1"
}