Bash script template/boilerplate that provides an initial structure for a new script.

#!/usr/bin/env bash

# -- ABOUT THIS PROGRAM: ------------------------------------------------------
#
# Author:       Vitor Britto
# Version:      1.0.0
# Description:  description goes here
# Source:       https://github.com/vitorbritto/boilerplates/blob/master/init/templates/tools/shellscript/myscript.sh
#
# -- INSTRUCTIONS: ------------------------------------------------------------
#
# Execute:
#   $ chmod u+x myscript.sh && ./myscript.sh
#
# Options:
#   -h, --help      output program instructions
#   -v, --version   output program version
#
# Alias:
#   alias myalias="bash ~/path/to/script/myscript.sh"
#
# Example:
#   some example goes here
#
# Important:
#   some important note goes here
#
# -- CHANGELOG: ---------------------------------------------------------------
#
#   DESCRIPTION:    First release
#   VERSION:        1.0.0
#   DATE:           xx/xx/xxxx
#   AUTHOR:         Vitor Britto
#
# -- TODO & FIXES: ------------------------------------------------------------
#
#   - some FIX or TODO here
#
# -----------------------------------------------------------------------------

# ------------------------------------------------------------------------------
# | VARIABLES                                                                  |
# ------------------------------------------------------------------------------

VERSION="1.0.0"
PROGRAM="myscript"

# ------------------------------------------------------------------------------
# | UTILS                                                                      |
# ------------------------------------------------------------------------------

# Header logging
e_header() {
    printf "$(tput setaf 38)→ %s$(tput sgr0)\n" "$@"
}

# Success logging
e_success() {
    printf "$(tput setaf 76)✔ %s$(tput sgr0)\n" "$@"
}

# Error logging
e_error() {
    printf "$(tput setaf 1)✖ %s$(tput sgr0)\n" "$@"
}

# Warning logging
e_warning() {
    printf "$(tput setaf 3)! %s$(tput sgr0)\n" "$@"
}

# ------------------------------------------------------------------------------
# | MAIN FUNCTIONS                                                             |
# ------------------------------------------------------------------------------

# My Script Help
myscript_help() {

cat <<EOT

------------------------------------------------------------------------------
MYSCRIPT - DESCRIPTION
------------------------------------------------------------------------------

Usage: ./myscript.sh [options]
Example: ./myscript.sh

Options:
    -h, --help      output program instructions
    -v, --version   output program version

Important:
    If you prefer, create an alias: myalias="bash ~/path/to/script/myscript.sh"
    And execute with: myscript

EOT

}

# My Script Version
myscript_version() {
    echo "$PROGRAM: v$VERSION"
}

# My Script Start
myscript_start() {
    # your code goes here
}

# ------------------------------------------------------------------------------
# | INITIALIZE PROGRAM                                                         |
# ------------------------------------------------------------------------------

main() {

    if [[ "${1}" == "-h" || "${1}" == "--help" ]]; then
        myscript_help ${1}
        exit
    elif [[ "${1}" == "-v" || "${1}" == "--version" ]]; then
        myscript_version ${1}
        exit
    else
        myscript_start
    fi

}

# Initialize
main $*