Możesz przepisać swój kod, aby wyglądał tak:
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
Więc będziesz świadomy tego, co zostało zrobione, testując wartość step
.
Następnie możesz ustawić trap
przed while
wykonywana jest pętla, więc przy wyjściu wartość step
jest zapisywany w pliku dziennika:
trap "echo step=$step > log_file" EXIT
Następnie wszystko, co musisz zrobić, to source
plik dziennika na początku skryptu, a ostatni będzie kontynuował swoje zadanie tam, gdzie został zatrzymany.