${var:-default}# Use default if var is unset/empty${var:=default}# Assign default if var is unset/empty${var:?error msg}# Exit with error if var is unset/empty${#var}# Length of var${var%suffix}# Remove shortest suffix match${var%%suffix}# Remove longest suffix match${var#prefix}# Remove shortest prefix match${var##prefix}# Remove longest prefix match${var/old/new}# Replace first match${var//old/new}# Replace all matches
[-ffile]# File exists and is regular[-ddir]# Directory exists[-sfile]# File exists and is not empty[-rfile]# File is readable[-wfile]# File is writable[-xfile]# File is executable[-Lfile]# File is a symlink
[-z"$str"]# String is empty[-n"$str"]# String is not empty["$a"="$b"]# Strings are equal[["$a"=~regex]]# Regex match (bash only)["$a"-eq"$b"]# Integers equal (-ne, -lt, -gt, -le, -ge)
# Iterate over filesforfin/var/log/*.log;doecho"Processing $f"done# Read file line by linewhileIFS=read-rline;doecho"$line"done<input.txt
# C-style for loopfor((i=0;i<10;i++));doecho"$i"done