Например если есть файл /file к которому нужно разграничить доступ, то можно в начале скрипта поставить:
trap 'mv -f /file.locked /file 2> /dev/null' 0
while ! mv /file /file.locked 2> /dev/null; do
sleep 1
done
Здесь можно ввести таймаут. Плюс таймаут на тот случай если после крэша останется лок.