Você pode querer reescrever seu código para que fique assim:
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
Então você estaria ciente do que foi feito testando o valor de
step
. Então, você pode querer definir uma
trap
antes do while
loop é executado, de modo que, ao sair, o valor de step
é gravado em um arquivo de log:trap "echo step=$step > log_file" EXIT
Então, tudo que você precisa fazer é
source
o arquivo de log no início do script, e o último continuará seu trabalho onde foi interrompido.