You may want to rewrite your code so that it looks like this:
while: ; do
case $step in
0) command_1 && ((step++)) ;;
1) command_2 && ((step++)) ;;
...
9) command_9 && step=0 ;;
*) echo "ERROR" >&2 ; exit 1 ;;
esac
done
So you would be aware of what has been done by testing the value of step
.
Then, you may want to set a trap
before the while
loop is executed, so that, on exit, the value of step
is written to a log file:
trap "echo step=$step > log_file" EXIT
Then, all you need to do is to source
the log file at the beginning of the script, and the last one will continue its job where it has been stopped.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…