Bash Scripting

Sample template of a bash style script

#!/usr/bin/env bash

# #############################################################################

NAME_="template"

PURPOSE_=""

SYNOPSIS_="${NAME_} [-options] <param>"

REQUIRES_=""

VERSION_="1.2"

DATE_="2007.05.15; last update: 2007.10.26"

AUTHOR_="James H. Nguyen <james [at] bluecentre [dot] net>"

URL_="james.bluecentre.net"

CATEGORY_=""

PLATFORM_=""

SHELL_="bash"

DISTRIBUTE_="yes"

# #############################################################################

# This program is distributed under the terms of the GNU General Public License

# HISTORY:

# 2007.10.04 v1.1 - changed the shebang to something that will run on a more

# variety of systems and distributions.

# 2007.10.24 v1.2 - added non-interactive mode for use in scripting that does

# not output fancy colours

# #############################################################################

# BEGIN: Declaration of system commands

LS=ls

SSH=ssh

SED=sed

AWK=awk

ECHO=/usr/bin/echo

GREP=grep

PRINTF=printf

NETG=netg

LDAPSEARCH=ldapsearch

# END: Declaration of system commands

# #############################################################################

# #############################################################################

# BEGIN: Declaration of system paths

# END: Declaration of system paths

# #############################################################################

# #############################################################################

# BEGIN: Declaration of script variables

# Making Scripts Colorful

#

# * tput sgr0 #Reset text attributes to normal without clearing screen

# * Escape sequence to change colors

# #\e[${forground};${background}m

# example white on black sequence is \e[37;40m

# #Forground colors Backgrounfd Color

# black=30; bgblace=40

# red=31; bgred=41

# green=32; bggreen=42

# yellow=33; bgyellow=43

# blue=34; bgblue=44

# magenta=35; bgmagenta=45

# cyan=36; bgcyan=46

# white=37; bgwhite=47

# * Turn text attribute off \e[0m

# * Change text attribute bold \e[1m

# * Change text attribute underline \e[4m

# * Change text attributer everse \e[7m

GREEN="\033[00;32m"

YELLOW="\033[01;33m"

RED="\033[00;31m"

NO_COLOUR="\033[00m"

SSH_CONDITION="[CONDITION] > /dev/null 2>&1 && echo '[${GREEN}TRUE_MSG${NO_COLOUR}]' \`hostname\` || echo '[${YELLOW}FALSE_MSG${NO_COLOUR}]' \`hostname\`"

T_MSG='OK'

F_MSG='!!'

INTERACTIVE=y

# END: Declaration of script variables

# #############################################################################

# #############################################################################

# BEGIN: Declaration of functions

usage() {

${PRINTF} >&2 "${NAME_} ${VERSION_} - ${PURPOSE_}

Usage: ${SYNOPSIS_}

Requires: ${REQUIRES_}

Options:

-i y|n, interactive switch

-a, description

-b, description

-c, description

-h, displays usage\n"

exit 1

}

# @param1 return code from $?

# @param2 message to display

# @usage checkErrors $? "msg"

checkErrors() {

if [ "${1}" -ne "0" ]; then

${PRINTF} "[${RED}!!${NO_COLOUR}] #${1}: ${2}\n"

exit ${1}

fi

}

# @param1 message to display

info() {

if [ ${INTERACTIVE} = "y" ]

then

${ECHO} ${GREEN}${1}${NO_COLOUR}

else

${ECHO} ${1}

fi

}

# @param1 message to display

warn() {

if [ ${INTERACTIVE} = "y" ]

then

${ECHO} ${YELLOW}${1}${NO_COLOUR}

else

${ECHO} ${1}

fi

}

# @param1 message to display

error() {

if [ ${INTERACTIVE} = "y" ]

then

${ECHO} ${RED}${1}${NO_COLOUR}

else

${ECHO} ${1}

fi

}

functionA() {

info 'this is an info'

return 0

}

functionB() {

warn 'this is a warning'

return 0

}

functionC() {

error 'this is an error'

`blah`

checkErrors $? 'testing checkErrors function'

return 0

}

functionD() {

CONDITION_CMD='ps -ef | grep james'

SSH_CMD=`${ECHO} ${SSH_CONDITION} | ${SED} -e "s/\[CONDITION\]/${CONDITION_CMD}/" -e "s/TRUE_MSG/${T_MSG}/" -e "s/FALSE_MSG/${F_MSG}/"`

${SSH} rodan "${SSH_CMD}"

checkErrors $? "command failed"

return 0

}

# END: Declaration of functions

# #############################################################################

# #############################################################################

# BEGIN: Main script

# #

# Special Variables

#

# * $? Exit status or return code of last command

# * $# Number of arguments

# * $@ Argument 1 thru n with Input Field Separator

# * $* "$1" $2" ... $n

# * $! Process id of last background process

# * $$ Process id of shell running this script

# * $- The current shell flags

#if [ $# -eq 0 ] || [ $# -eq 1 ]; then

#if [ $# -le 0 ]; then

# usage

# exit 1

#fi

# uses bash function getopts

while getopts ":i:" options; do

case ${options} in

i )

INTERACTIVE=${OPTARG}

;;

h )

usage

;;

\? )

usage

exit 1

;;

* )

usage

exit 1

;;

esac

done

functionA

#case ${1} in

#-a)

# shift 1

# functionA ${1} ${2}

# ;;

#-b)

# shift 1

# functionB ${1} ${2}

# ;;

#-c)

# shift 1

# functionC ${1} ${2}

# ;;

#-d)

# shift 1

# functionD

# ;;

#-h)

# usage

# ;;

#-*)

# usage

# ;;

#*)

# usage

# ;;

#esac

# END: Main script

# #############################################################################