Bash script skeleton

#!/usr/bin/env bash
# Script to do stuff
set -e
# Consider: set -o pipefail

error() {
    echo "$0: ERROR: $1" >&2
    exit 1
}

info() {
    echo "$0: INFO: $1" >&2
}

usage() {
    echo "Usage: $0 -p|-s|-t -u <user> file [file] ..." >&2
    exit 1
}

TEMPDIR="$(mktemp -d)"

while getopts ':hpstu:' opt; do
    case $opt in
        p)
            ENV="prod"
            ;;
        s)
            ENV="stage"
            ;;
        t)
            ENV="test"
            ;;
        u)
            RUSER="$OPTARG"
            ;;
        \?|h)
            usage
            ;;
    esac
done
shift $((OPTIND-1))
FILES=( "${@}" )

trap 'error "Script ended unexpectedly at line $LINENO"; rm -rf -- "$TEMPDIR"' EXIT

# Do stuff

trap - EXIT