May 2007
Beginner
628 pages
15h 46m
English
You have a long job or process you need to automate, but it may
require manual intervention and you need to be able to restart at
various points in the progress. You might use a GOTO to jump
around, but bash doesn’t have that.
Use a case statement to break your script up into sections or phases.
First, we’ll define a standardized way to get answers from the user:
# cookbook filename: func_choice
function choice {
# Let the user make a choice about something and return a standardized
# answer. How the default is handled and what happens next is up to
# the if/then after the choice in main
local answer
printf "%b" "\a" # Ring the bell
read -p "$*" answer
case "$answer" in
[yY1] ) choice='y';;
[nN0] ) choice='n';;
* ) choice="$answer";;
esac
} # end of function choiceThen, we’ll set up our phases:
# cookbook filename: using_phases # Main Loop until [ "$phase" = "Finished." ]; do case $phase in phase0 ) ThisPhase=0 NextPhase="$(( $ThisPhase + 1 ))" echo '############################################' echo "Phase$ThisPhase = Initialization of FooBarBaz build" # Things that should only be initialized at the beginning of a # new build cycle go here # ... echo "Phase${ThisPhase}=Ending" phase="phase$NextPhase" ;; # ... phase20 ) ThisPhase=20 NextPhase="$(( $ThisPhase + 1 ))" echo '############################################' echo "Phase$ThisPhase = Main processing for FooBarBaz build" # ... choice "[P$ThisPhase] Do we need to stop and fix anything? ...Read now
Unlock full access