#!/bin/bash trap on_exit EXIT # run 'on_exit' on exit on_exit() { [ -n "$LKD" ] && lock_queue -u 2>/dev/null # unlock the queue on exit } # if the lock was set here lock_queue() { # <-- '-u' to remove lockfile local LOK="testlockfile" # lock file name local -i MAX=240 SEC=0 # max seconds to gain a lock ; seconds waiting if [ -z "$1" ] ; then # lock queue mkdir $LOK 2>/dev/null && LKD='t' while [ -z "$LKD" ] && (( SEC < MAX )) ; do # lock file present sleep 1 # wait a second (( ++SEC )) # accumulate seconds mkdir $LOK 2>/dev/null && LKD='t' done # try again while locked for MAX secs [ -z "$LKD" ] && exit 1 elif [ "$1" = '-u' ] ; then # unlock queue 'rmdir' "$LOK" # remove the lock fi } lock_queue NO=$(cat testcounterfile) echo "$NO" (( ++NO )) echo "$NO" > testcounterfile