# Bash scripting ## String manipulation Remove shortest from end ${VAR%substr} # e.g. ${FILEPATH%.*}.out # change extension from whatever to .out Remove longest from start ${VAR##substr} # e.g. ${FILEPATH##*/} # get only file name portion %% - longst from end, # - shortest from start ## Control flow Loop over files for file in glob/*; do something $file; done Loop over integers for i in `seq 10`; do echo $i; done ## Conditionals * `-z`: is empty string * `-n`: non-empty string * `-f`: is regular file * `$A == $B`: string equality, accepts globs * `$A != $B`: string inequality ## Heredocs cat << EOF > file bla bla EOF Ignoring the initial indent: ... cat <<- EOF > file bla bla EOF ... Don't interpolate variables: cat << 'EOF' > file bla bla EOF