+
+function deleteLock {
+    if ! rmdir /tmp/$(basename $0).lock; then
+       scottyerror "Could not delete lockfile /tmp/$(basename $0).lock!"
+    fi
+}
+
+function prepare {
+    scottyinfo "Preparing for sync"
+}
+
+function cleanup_abort {
+    scottyerror "Caught exit signal! Cleaning up..."
+
+    cleanup ABORT
+
+    if [ $(jobs -p) ]; then
+       scottyerror TERMinating remaining child processes...
+       kill $(jobs -p)
+    fi
+
+    deleteLock
+
+    exit
+}
+
+function cleanup {
+    scottyinfo "No cleanup function was defined."
+}
+
+function prepare {
+    scottyinfo "No prepare function was defined."
+}
+
+function cleanup_normal {
+    cleanup
+    deleteLock
+}
+
+function printhelp {
+    cat <<EOF
+Usage: $(basename $0) [OPTION]...
+
+Recognized options:
+  -q   Only output errors
+  -n   Run only on nth day
+  -h   Print out this help
+EOF
+}
+
+function backmeupscotty {
+    while getopts "qn:h" opt; do
+       case $opt in
+           q)
+               exec > /dev/null
+               ;;
+           n)
+               BACKUP_RUNEVERYNTHDAY=$OPTARG
+               ;;
+           h)
+               printhelp
+                exit 0
+                ;;
+       esac
+    done
+
+    if isNthDay; then
+       scottyinfo "This is the nth day."
+    elif latestTooOld; then
+       scottyinfo "The latest backup is too old."
+    else
+       scottyinfo "No backup has to be done. Exiting."
+       exit 0
+    fi
+
+    scottyinfo "Performing backup."
+
+    trap cleanup_abort EXIT
+
+    prepare
+    scottysync
+
+    trap cleanup_normal EXIT
+
+    exit 0
+}
+
+if ! mkdir /tmp/$(basename $0).lock; then
+    scottyerror "Another instance of $(basename $0) is still running!"
+    exit 1
+else
+    trap deleteLock EXIT
+fi