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
# #############################################################################