#!/bin/bash # Automatic sequence control script # ## Start of customization part function step_1 { echo -e "Eins" cat .nofile saveReturn $? } function step_2 { echo -e "Zwei" endReturn echo zwo } function step_3 { echo -e "Drei" echo drei } function step_10 { echo -e "Zehn" echo zehn } function step_11 { echo -e"Elf" echo elf } help() { echo "Usage: ${0##*/} [Options] [Step Number(s)]" echo echo " [Options]" echo " -q : Don't ask for permission to execute next step" echo " If called without starting step number only this help is shown" echo echo " [Step Number(s) 1-255]" echo " Single step number : starting point of process" echo " Multiple step numbers : execute only given steps" echo " execute only one step with using special step 0" echo " ( e.g. only execute step 4: $0 4 0 )" echo " Step Documentation" echo " 1: Step with failure and saveReturn" echo " 2: Step with endReturn at the beginning" echo " 3: Regular step without return check (last step when starting with 1 or 2)" echo echo " 10: Regular step without return check (staring point for separate sequence)" echo " 11: Regular step without return check (last step of sequence starting with 10)" } # ## Start of generic script part ## (do not change) QUIET=0 ERNO=0 # endCheckEmpty [VariableName] [DESCRIPTION] # DESCRIPTION : Optional text for error function endCheckEmpty() { local errorText=$1 eval 'local ref=$'$1 if [ ! -z "$2" ] ; then errorText=$2 fi if [ -z $ref ] ; then echo -e "[Error] $errorText must not be empty.\nAborting installation." exit 666 fi } function saveReturn() { if [ $1 -ne 0 ] ; then ERNO=$1 fi } # endReturn [-f] # -f : force exit with $ERNO without user input function endReturn() { if [[ ( $ERNO -ne 0 && $QUIET -ne 0 ) || ( $ERNO -ne 0 && ! -z $1 && $1 == "-f" ) ]] ; then echo echo -e "[Error] Return value $ERNO detected.\nAborting installation." exit $ERNO fi if [ $ERNO -ne 0 ] ; then echo echo "[Error] Return value $ERNO detected." read -p "End installation: y(default)/n? " answer case $answer in [nN]) echo echo Continuing installation... ;; *) echo echo Installation aborted exit $ERNO; ;; esac fi } # execute [-q] # -q: don't stop and don't report step functions which cannot be found # execute given step_ function function execute() { local NOTFOUND=0 local NOREPORT=0 if [ $1 == "-q" ] ; then NOREPORT=1 shift fi # check if step function exists declare -F step_$1 &>>/dev/null || NOTFOUND=1 if [ $NOTFOUND -eq 1 ] && [ $NOREPORT -ne 1 ] ; then echo "Step $1 not found" exit 1; fi # don't execute step functions which are not available if [ $NOTFOUND -eq 1 ] ; then return $NOTFOUND fi echo -en "\n[STEP $1] " if [ $QUIET -ne 1 ] ; then read -p "Start: y/n(default)? " answer case $answer in [yY]) step_$1 $1 ;; *) echo Aborting installation at step $1 exit 1; ;; esac else step_$1 $1 fi } # continous # (max 255) # execute installation continously from given starting step function continous() { for ((i=$1; i<=255; i++)); do execute -q $i local res=$? if [ $res -ne 0 ] ; then break; fi done } # selection # execute given step list # e.g.: selection -q 1 4 12 function selection() { for i in $@ ; do # stop on step 0 if [ $i -eq 0 ] ; then break else execute $i fi done } main() { # detect if option quiet is available if [ ! -z "$1" ] && [ $1 == "-q" ] ; then QUIET=1 shift fi # display help if [ -z "$1" ] ; then help START=1 if [ $QUIET -eq 1 ] ; then exit 1; fi else START=$1 fi # check if more than one step is given and select execution mode if [ ! -z $2 ] ; then selection $@ else continous $START fi echo echo "${0##*/} finished" } main "$@" exit 0;