#!/bin/bash

# Template to start a simple bash program.  This is designed only for the
# simplest of programs where all program paramters are positional, there is no
# help text, etc.

# Description of argument(s):
# parm1                             Bla, bla, bla (e.g. "example data").


function get_parms {

  # Get program parms.

  parm1="${1}" ; shift

  return 0

}


function exit_function {

  return

}

function validate_parms {

  # Validate program parameters.

  # Your validation code here.

  if [ -z "${parm1}" ] ; then
    echo "**ERROR** You must provide..." >&2
    return 1
  fi

  trap "exit_function $signal \$?" EXIT

  return 0

}


function mainf {

  get_parms "$@" || return 1

  validate_parms || return 1

  # Your code here...

  return 0

}


# Main

  mainf "${@}"
  rc="${?}"
  exit "${rc}"
