First commit of sequencer template
This commit is contained in:
208
sequencer.sh
Executable file
208
sequencer.sh
Executable file
@@ -0,0 +1,208 @@
|
|||||||
|
#!/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] <Step Number>
|
||||||
|
# -q: don't stop and don't report step functions which cannot be found
|
||||||
|
# execute given step_<Step Number> 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 <Starting Step Number>
|
||||||
|
# (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 <Step Number List (separated by space)>
|
||||||
|
# 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;
|
Reference in New Issue
Block a user