Bạn có thể muốn viết lại mã của mình để nó trông giống như sau:
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
Vì vậy, bạn sẽ biết những gì đã được thực hiện bằng cách kiểm tra giá trị của step
.
Sau đó, bạn có thể muốn đặt một trap
trước while
vòng lặp được thực thi, do đó, khi thoát, giá trị của step
được ghi vào tệp nhật ký:
trap "echo step=$step > log_file" EXIT
Sau đó, tất cả những gì bạn cần làm là đến source
tệp nhật ký ở đầu tập lệnh và tệp cuối cùng sẽ tiếp tục công việc của nó khi nó đã bị dừng.