#!/bin/bash -e
##########################################################################################
#### template for bash scripts #### START BELOW ##########################################
##########################################################################################
############################################################################ begin logging
# check if stdout is a terminal...
if test -t 1; then
# see if it supports colors...
ncolors = $( tput colors)
if test -n " $ncolors " && test $ncolors -ge 8; then
bold = " $( tput bold) "
underline = " $( tput smul) "
standout = " $( tput smso) "
normal = " $( tput sgr0) "
black = " $( tput setaf 0) "
red = " $( tput setaf 1) "
green = " $( tput setaf 2) "
yellow = " $( tput setaf 3) "
blue = " $( tput setaf 4) "
magenta = " $( tput setaf 5) "
cyan = " $( tput setaf 6) "
white = " $( tput setaf 7) "
fi
fi
append_msg( ) {
if test $# -ne 0; then
echo -n " : ${ bold } $* "
fi
echo " ${ normal } "
}
# write a message
message( ) {
if test $# -eq 0; then
return
fi
echo " ${ bold } ${ while } $* ${ normal } " 1>& 2
}
# write a success message
success( ) {
echo -n " ${ bold } ${ green } success " 1>& 2
append_msg $* 1>& 2
}
# write a notice
notice( ) {
echo -n " ${ bold } ${ yellow } notice " 1>& 2
append_msg $* 1>& 2
}
# write a warning message
warning( ) {
echo -en " ${ bold } ${ red } warning " 1>& 2
append_msg $* 1>& 2
}
# write error message
error( ) {
echo -en " ${ bold } ${ red } error " 1>& 2
append_msg $* 1>& 2
}
# run a command, print the result and abort in case of error
# option: --ignore: ignore the result, continue in case of error
run( ) {
ignore = 1
while test $# -gt 0; do
case " $1 " in
( --ignore) ignore = 0; ;
( *) break; ;
esac
shift;
done
echo -n " ${ bold } ${ yellow } running: ${ white } $* ${ normal } … "
set +e
result = $( $* 2>& 1)
res = $?
set -e
if test $res -ne 0; then
if test $ignore -eq 1; then
error " failed with return code: $res "
if test -n " $result " ; then
echo " $result "
fi
exit 1
else
warning " ignored return code: $res "
fi
else
success
fi
}
############################################################################ error handler
function traperror( ) {
set +x
local err = ( $1 ) # error status
local line = " $2 " # LINENO
local linecallfunc = " $3 "
local command = " $4 "
local funcstack = " $5 "
for e in ${ err [@] } ; do
if test -n " $e " -a " $e " != "0" ; then
error " line $line - command ' $command ' exited with status: $e ( ${ err [@] } ) "
if [ " ${ funcstack } " != "main" -o " $linecallfunc " != "0" ] ; then
echo -n " ... error at ${ funcstack } " 1>& 2
if [ " $linecallfunc " != "" ] ; then
echo -n " called at line $linecallfunc " 1>& 2
fi
echo
fi
exit $e
fi
done
success
exit 0
}
# catch errors
trap 'traperror "$? ${PIPESTATUS[@]}" $LINENO $BASH_LINENO "$BASH_COMMAND" "${FUNCNAME[@]}" "${FUNCTION}"' ERR SIGINT INT TERM EXIT
##########################################################################################
#### START HERE ##########################################################################
##########################################################################################
######################################################### commandline parameter evaluation
while test $# -gt 0; do
case " $1 " in
( --help| -h) less <<EOF
SYNOPSIS
$0 [ OPTIONS]
OPTIONS
--help, -h show this help
DESCRIPTION
EOF
exit; ;
( *) error " unknow option $1 , try $0 --help " ; exit 1; ;
esac
if test $# -eq 0; then
error " missing parameter, try $0 --help " ; exit 1
fi
shift;
done
##################################################################################### Main