#!/usr/bin/env bash -f SCRIPT_NAME=`basename $0` read -rd '' HELP << HELP $SCRIPT_NAME - what the script does Usage: $SCRIPT_NAME [-a|--option-a A] - the first option (default: some sensible default) [-b|--option-b B] - another option Falls back on \$SOME_SYSTEM_VARIABLE positional-args ... - A longer description spanning several lines Examples: * $SCRIPT_NAME -a an -b example # With a description HELP [[ $# -lt 1 ]] && echo "$HELP" && exit 1; option_a= option_b="$SOME_SYSTEM_VARIABLE" while [ "${1+defined}" ]; do case $1 in -h|--help) echo "$HELP" && exit 0;; -a|--option-a) option_a=$2; shift;; -b|--option-b) option_b=$2; shift;; *) echo "Unknown option $1" >&2 && exit 1;; esac shift done