#!/bin/bash _help() { echo ' Usage: lock-util {lock-file} [-v] [command] [args] Commands: create exist ( return 0 if lock exists ) old [age in seconds] ( return 0 if file younger than [args] seconds ) remove -v as first argument sets very verbose mode ' } LOCKFILE="$1" [[ "$2" = "-v" ]] && { VERBOSE=on COMMAND="$3" ARG="$4" } || { COMMAND="$2" ARG="$3" } BOXES=cat which boxes &>/dev/null && BOXES="boxes -d shell" _create() { LOCKDIR=$( dirname "$LOCKFILE" ) mkdir -p "$LOCKDIR" touch "$LOCKFILE" } _exist() { test -f "$LOCKFILE" } _remove() { rm "$LOCKFILE" } [[ $COMMAND = "create" ]] && { _exist && { [[ "$VERBOSE" = "on" ]] && echo "LOCK FILE EXISTS" | $BOXES exit 1 } _create ec=$? [[ "$VERBOSE" = "on" ]] && [[ $ec -eq 0 ]] && echo "LOCK FILE CREATED" | $BOXES [[ "$VERBOSE" = "on" ]] && [[ $ec -ne 0 ]] && echo "UNABLE TO CREATE LOCK FILE" | $BOXES exit $ec } [[ $COMMAND = "exist" ]] && { _exist ec=$? [[ "$VERBOSE" = "on" ]] && [[ $ec -eq 0 ]] && echo "LOCK FILE EXISTS" | $BOXES [[ "$VERBOSE" = "on" ]] && [[ $ec -ne 0 ]] && echo "LOCK FILE DOES NOT EXIST" | $BOXES exit $ec } [[ $COMMAND = "old" ]] && { _exist || { [[ "$VERBOSE" = "on" ]] && echo "LOCK FILE MISSING" | $BOXES exit 1 } [[ -z "$ARG" ]] && _help && echo "MISSING ARGUMENT" | $BOXES && exit 1 created=$( stat -c %Y "$LOCKFILE" ) now=$( date +%s ) age=$(( $now - $created )) test $ARG -lt $age ec=$? [[ "$VERBOSE" = "on" ]] && [[ $ec -eq 0 ]] && echo "LOCK FILE OLDER THAN $ARG s" | $BOXES [[ "$VERBOSE" = "on" ]] && [[ $ec -ne 0 ]] && echo "LOCK FILE YOUNGER THAN $ARG s" | $BOXES exit $ec } [[ $COMMAND = "remove" ]] && { _remove ec=$? [[ "$VERBOSE" = "on" ]] && [[ $ec -eq 0 ]] && echo "LOCK FILE REMOVED" | $BOXES [[ "$VERBOSE" = "on" ]] && [[ $ec -ne 0 ]] && echo "UNABLE TO REMOVE LOCK FILE" | $BOXES exit $ec } echo Command not recognized _help