if
if [ expression ] then commands elif [ expression2 ] then commands else commands fi
case
case string1 in str1) commands;; str2) commands;; *) commands;; esac
Loops
for var1 in list do commands done for i in `seq 0 100` do echo $i done while [ expression ] do commands done until [ expression ] do commands done
File tests
-d filename return True if filename is a director -f filename return True if filename is a normal file -r filename return True if filename is readable -s filename return True if filename is not empty -w filename return True if filename is writable -x filename return True if filename is executable
Test program arguments
while [ $# -gt 0 ]; do # Until you run out of parameters . . . case "$1" in --without-lxc) WITH_LXC="no" ;; --help) configure_help exit 0 ;; esac shift # Check next set of parameters. done
Test the number of script arguments
if [ $# -ne 1 ] then echo "Error: program argument missing" fi
Test grep result
grep "somestring" somefile if [ "$?" -eq 0 ]; then echo "processing somefile" fi
Test command result
some_command if [ $? -eq 0 ]; then echo OK else echo FAIL fi
Test environment variable
if [ -n "${ENV_VAR+x}" ] then ... do something ... else ... do something ... fi
Test if a program is installed
if which program >/dev/null; then echo program found else echo program not found exit 1 fi
Create a “here document”
cat > lxc.conf << EOF lxc.utsname = $1 lxc.rootfs = $1/rootfs lxc.mount.entry=/lib lib none ro,bind 0 0 lxc.mount.entry=/bin bin none ro,bind 0 0 lxc.mount.entry=/usr usr none ro,bind 0 0 lxc.mount.entry=/sbin sbin none ro,bind 0 0 lxc.mount.entry=/lib64 lib64 none ro,bind 0 0 lxc.mount.entry=proc /proc proc nodev,noexec,nosuid 0 0 lxc.mount.entry=tmpfs /dev/shm tmpfs defaults 0 0 lxc.pts=1024 EOF
Arithmetic
i=1 i=$[i+1] echo $i
Some other bash resources