
#!/bin/bash
# File	: bck_from_remote.sh
# By	: MaartenDeBoer.nl, 2016-12-15
# Subject	: Script to backup (via rsync) from data at remote location
#(0.2)	: Add ETC
#(0.3)	: Add MOUNT
#set -x
PGM="`basename $0|cut -d\. -f1`"
VER="0.3"
LOG="${HOME}/log/${PGM}.log"
ETC="${HOME}/etc/${PGM}"

SOURCE="remote-host:/media/usb01"
DESTINATION="/mnt/usb01"
SSHPORT="22"
MOUNT=""
UMOUNT=""

USAGE()
{
  echo "Usage: ${PGM} [options]"
  echo "Options : "
  echo "  -d    : change Destination (${DESTINATION})"
  echo "  -e    : change Etc-file (${ETC})"
  echo "  -h    : This help"
  echo "  -p    : change sshPort (${SSHPORT})"
  echo "  -m    : change Mount 1st (${MOUNT})"
  echo "  -s    : change Source (${DESTINATION})"
  echo "  -u    : Umount 2nd"
  echo "  -V    : Version"
}
while [ ${#} -gt 0 ]
do
  case "${1}" in
    '-e')  ETC=${2}; shift ;;
    '-d')  DESTINATION=${2}; shift ;;
    '-m')  MOUNT=${2}; shift ;;
    '-p')  SSHPORT=${2}; shift ;;
    '-s')  SOURCE=${2}; shift ;;
    '-u')  UMOUNT=1 ;;
    '-h')  USAGE; exit 1 ;;
    '-x')  set -x ;;
    '-V')  echo "Version=${VER}" ; exit 1 ;;
    *) echo "Option ${1} not found." ; USAGE; exit 1 ;;
  esac 
  shift
done
if [ -f ${ETC} ]; then
  echo "  Reading ${ETC}..."
  READETC="`grep ^DESTINATION= ${ETC}|cut -d\= -f2`"
  if [ "${READETC}" != "" ]; then
    DESTINATION=${READETC}
  fi
  READETC="`grep ^SOURCE= ${ETC}|cut -d\= -f2`"
  if [ "${READETC}" != "" ]; then
    SOURCE=${READETC}
  fi
  READETC="`grep ^SSHPORT= ${ETC}|cut -d\= -f2`"
  if [ "${READETC}" != "" ]; then
    SSHPORT=${READETC}
  fi
  READETC="`grep ^MOUNT= ${ETC}|cut -d\= -f2-99`"
  if [ "${READETC}" != "" ]; then
    MOUNT=${READETC}
  fi
fi

echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
echo "SOURCE=${SOURCE}"|tee -a ${LOG}
echo "DESTINATION=${DESTINATION}"|tee -a ${LOG}
echo "SSHPORT=${SSHPORT}"|tee -a ${LOG}
echo "MOUNT=${MOUNT}"|tee -a ${LOG}
echo "UMOUNT=${UMOUNT}"|tee -a ${LOG}
sleep 1

# mount first
if [ "${MOUNT}" != "" ]; then
  sudo mount ${MOUNT}
# Getting the last (2nd) part of the mount info/command (without the options in the 1st part)
  POS="`expr index \"${MOUNT}\" /`"
  MOUNT2="`expr substr \"${MOUNT}\" ${POS} 200|awk '{print $2}'`"
  echo "  Mounted ${MOUNT2} :"|tee -a ${LOG}
  df -h ${MOUNT2}|tee -a ${LOG}
fi

rsync -avz -e "ssh -p${SSHPORT}" ${SOURCE} ${DESTINATION}|tee -a ${LOG}

# uNmount 2nd
if [ "${UMOUNT}" != "" ]; then
  if [ "${MOUNT}" = "" ]; then
    echo "  No mount points given."
  else
    echo "  Unmounting ${MOUNT2}"|tee -a ${LOG}
    sudo umount ${MOUNT2}
  fi
fi

echo "`date` ${PGM} v${VER} finished."|tee -a ${LOG}
exit 0

