diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..71103e0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/stepTemplateExample.sh diff --git a/README.md b/README.md index 03a4bba..bda69df 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,12 @@ # shell_sequencer -Shell script as wrapper for sequential tasks. \ No newline at end of file +Shell script as wrapper for sequential tasks, such as complex server installations or recurring maintenance tasks. + +Step definition is separated from the sequence control. The step definition just needs to "include" the sequence controller at the end. + +## sequencer.sh + +Main sequencer script to be included at the end of a step definition script. + + [...] + . ./sequencer.sh diff --git a/sequencer.sh b/sequencer.sh index 4d476d4..e4e180d 100755 --- a/sequencer.sh +++ b/sequencer.sh @@ -1,38 +1,16 @@ #!/bin/bash -# Automatic sequence control script +## Sequencer script is doing nothing on its own. It is included by a step definition +## script which uses the sequencer to provide sequencial operations with or without +## user interaction (see template.sh) -# -## Start of customization part +## Start of generic script part -function step_1 { - echo -e "Eins" - cat .nofile - saveReturn $? -} +QUIET=0 +ERNO=0 +TEMPLATE_NAME=stepTemplateExample.sh -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() { +function helpSequencer() { echo "Usage: ${0##*/} [Options] [Step Number(s)]" echo echo " [Options]" @@ -43,23 +21,9 @@ help() { 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)" + echo " ( e.g. only execute step 4: $0 4 0 )" } -# -## Start of generic script part -## (do not change) - -QUIET=0 -ERNO=0 - # endCheckEmpty [VariableName] [DESCRIPTION] # DESCRIPTION : Optional text for error function endCheckEmpty() { @@ -175,6 +139,59 @@ function selection() { done } +# Creating a minimal step definition template +function createTemplate() { + if [ -f $TEMPLATE_NAME ] ; then + return 1 + fi + echo "#!/bin/bash" > $TEMPLATE_NAME + echo >> $TEMPLATE_NAME + echo "function step_1 {" >> $TEMPLATE_NAME + echo " echo \"My custom step one\"" >> $TEMPLATE_NAME + echo "}" >> $TEMPLATE_NAME + echo >> $TEMPLATE_NAME + echo "help() {" >> $TEMPLATE_NAME + echo " echo \" Step Documentation\"" >> $TEMPLATE_NAME + echo " echo \" 1: My custom step\"" >> $TEMPLATE_NAME + echo "}" >> $TEMPLATE_NAME + echo >> $TEMPLATE_NAME + echo ". $0" >> $TEMPLATE_NAME + + chmod +x $TEMPLATE_NAME + return 0 +} + +# Always display sequencer help and, if available, definition script help +function displayHelp() { + local NOTFOUND=0 + + helpSequencer + + # check if help function exists + declare -F help &>>/dev/null || NOTFOUND=1 + if [ $NOTFOUND -eq 1 ] ; then + echo -e "\n It seems ${0##*/} was called directly." + echo -e " Please create a step definition script first.\n" + read -p " Create a step definition template now? y/n(default)? " answer + case $answer in + [yY]) + createTemplate + if [ $? -eq 0 ] ; then + echo -e "\n $TEMPLATE_NAME created." + else + echo -e "\n $TEMPLATE_NAME exists...Nothing to do!" + fi + ;; + *) + echo -e "\n Nothing to do!" + ;; + esac + exit 1; + else + help + fi +} + main() { # detect if option quiet is available if [ ! -z "$1" ] && [ $1 == "-q" ] ; then @@ -184,7 +201,7 @@ main() { # display help if [ -z "$1" ] ; then - help + displayHelp START=1 if [ $QUIET -eq 1 ] ; then exit 1; diff --git a/stepTemplate.sh b/stepTemplate.sh new file mode 100755 index 0000000..a7a5806 --- /dev/null +++ b/stepTemplate.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +## +## Sequencer interface: +## - step_[1 - 255] functions performing custom operations +## - help() function describing functionality +## + +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 " 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)" +} + +# +## Path to local sequencer.sh script + +. ./sequencer.sh