Bash Script Skeleton

Getting Script Directory

SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )

Processing Arguments and Help

function help {
  echo "Usage: $0 <domain> <acme-string> [type] [name]"
  echo "Pass both type and name or neither."
  echo "Default: type=TXT and name=_acme-challenge"
  echo
  echo "E.g.:"
  echo "Setting a TXT record for _acme-challenge:"
}
 
if [ "$#" -lt 2 ]; then
  help
  exit 1
else
  domain=$1
  acme=$2
fi
if [ "$#" -eq 3 ]; then
  help
fi
if [ "$#" -eq 4 ]; then
  rtype=$3
  name=$4
else
  rtype="TXT"
  name="_acme-challenge"     # name of TXT record to update
fi

Related

echo "Total Number of Arguments:" $#
echo "Argument values:" $@

Setting Color

Ref: https://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux

RED='\033[1;31m'
GREEN='\033[1;32m'
YELLOW='\033[1;33m'
CYAN='\033[1;36m'
NC='\033[0m' # No Color
printf "Setting ${YELLOW}$rtype${NC} record ${GREEN}$name${NC} with value ${RED}$acme${NC} for domain ${CYAN}$domain${NC} ...\n\n"

OLD - Check for number of arguments

#!/bin/bash
#
# .......... comment ............
#
NOW=$(date +"%Y-%m-%d-%H-%M-%S")
#
#
if [[ ! ("$#" == 1) ]]; then
  echo "One argument required."
  exit 1
fi
#
exit 0
#

Check if argument is empty

if [ -z "$1" ]; then
    echo 'Usage: $0 "<Comment>"'
    exit 1
fi

if conditions

Single String Comparision

if [ $thesimple == 'N' ]; then
  echo "Removing Cache"
  sudo rm -Rf ${TARGET_MAIN}/frontend/web/assets/*
fi

OR condition

if [[ $thesimple == 'N' || $thegitit  == 'N' ]]; then
    echo "At least one of them is N"
fi

Sleep a random amount of time between 0 and 10 minutes

sleep $((RANDOM%600))

Check if file does not exist

if [ ! -f "$HOSTFILE" ]; then
  echo "File: $HOSTFILE does not exist"
  exit 1
fi

Check if directory exist

if [ -d "$HOSTDIR" ]; then
  echo "Directory: $HOSTDIR exists"
fi

Another Skeleton

Inspired by Nagios script

PROGNAME=`/usr/bin/basename $0`
PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`
REVISION="1.0"
#
STATE_OK=0
STATE_ERROR=1
#
check_root() {
    # make sure script is running as non-root
    if [ `whoami` == root ]; then
        echo "Please make sure script is running as non-root."
        exit $STATE_ERROR
    fi
}
 
print_usage() {
    echo "Usage: $PROGNAME [-s]"
    echo "       E.g.: $PROGNAME"
    echo "       E.g.: $PROGNAME -s"
    echo "Usage: $PROGNAME --help"
    echo "Usage: $PROGNAME --version"
    echo ""
    echo "Option -s is a Simple Deploy. No git check/commit."
    echo "Option -a is to not exit on Apache check."
}
 
print_help() {
    print_revision $PROGNAME $REVISION
    echo ""
    print_usage
    echo ""
    echo "Deploy Application to the Environment defined in deploy_settings"
    echo ""
}
 
print_revision() {
    echo "$1 v$2 Application Deployment"
}
 
# Check user is root
check_root
#
thesimple=N
theapache=N
thegitit=N
echo "Total Number of Arguments:" $#
echo "Argument values:" $@
 
while test -n "$1"; do
    case "$1" in
        --help)
            print_help
            exit $STATE_OK
            ;;
        -h)
            print_help
            exit $STATE_OK
            ;;
        --version)
            print_revision $PROGNAME $REVISION
            exit $STATE_OK
            ;;
        -V)
            print_revision $PROGNAME $REVISION
            exit $STATE_OK
            ;;
        --simple)
            thesimple=Y
            ;;
        -s)
            thesimple=Y
            ;;
        --apache)
            theapache=Y
            ;;
        -a)
            theapache=Y
            ;;
        --gitit)
            thegitit=Y
            ;;
        -g)
            thegitit=Y
            ;;
        --critical)
            thecrit=$2
            ;;
        -c)
            thecrit=$2
            ;;
        --fstype)
            thefsty=$2
            ;;
        -t)
            thefsty=$2
            ;;
        *)
            echo "Unknown argument: $1"
            print_usage
            exit $STATE_ERROR
            ;;
    esac
    shift
done

QR Code
QR Code tech:linux:bash_script_skeleton (generated for current page)