#!/usr/bin/env bash # ERR Trap Inheritance by shell functions, command substitutions, and subshells. set -E # Exit on Error Causes the script to immediately exit if any command returns a non-zero exit status unless that command is followed by || to explicitly handle the error. set -e # Treats the use of undefined variables as an error, causing the script to exit. set -u # Ensures that a pipeline (a series of commands connected by |) fails if any command within it fails, rather than only failing if the last command fails. set -o pipefail # Cleaup script. trap cleanup SIGINT SIGTERM ERR EXIT # Get the script location and cd to it. script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P) # Usage error message. usage() { cat <&2 -e "${1-}" } # Script exit implementation. die() { local msg=$1 local code=${2-1} # default exit status 1 msg "\033[0;31m$msg\033[0m" exit "$code" } # Parameter parsing implementation. parse_params() { flag=0 param='' while :; do case "${1-}" in -h | --help) usage ;; -v | --verbose) set -x ;; --no-color) NO_COLOR=1 ;; -f | --flag) flag=1 ;; # example flag -p | --param) # example named parameter param="${2-}" shift ;; -?*) die "Unknown option: $1" ;; *) break ;; esac shift done args=("$@") # check required params and arguments [[ -z "${param-}" ]] && die "Missing required parameter: param" [[ ${#args[@]} -eq 0 ]] && die "Missing script arguments" return 0 } # ----- Script Start ----- # Parse parameters and setup colors for script. parse_params "$@" setup_colors # Script logic example here. msg "${GREEN}Read parameters:${NOFORMAT}" msg "- flag: ${flag}" msg "- param: ${param}" msg "- arguments: ${args[*]-}" exit 0