From b71146769422958a5601f6c883051734c1cf358a Mon Sep 17 00:00:00 2001 From: Christoph Date: Tue, 1 May 2018 03:31:41 +0200 Subject: [PATCH] snippets/base_script.sh: add some output. --- snippets/base_script.sh | 186 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 185 insertions(+), 1 deletion(-) diff --git a/snippets/base_script.sh b/snippets/base_script.sh index 654147b..9416af1 100755 --- a/snippets/base_script.sh +++ b/snippets/base_script.sh @@ -9,6 +9,8 @@ LOCK_DIR="/tmp/$(basename $0).$$.LOCK" log_file="${LOCK_DIR}/${script_name%%.*}.log" backup_date="$(date +%Y-%m-%d-%H%M)" +declare -a files_backuped_arr=() +declare -a dirs_backuped_arr=() # ---------- # Base Function(s) @@ -33,6 +35,10 @@ usage() { +\033[1mFiles\033[m + + $conf_file: Configuration file + \033[1mExample:\033[m @@ -169,6 +175,83 @@ blank_line() { fi } +# - Backup file or directory +# - +backup() { + + is_directory=false + + if [[ -z "$1" ]] ; then + error "No file/directory for backup given!" + return + elif [[ -h "$1" ]] ; then + _source="$(realpath $1)" + warn "'$1' is a symlink to $_source." + elif [[ ! -d "$1" ]] && [[ ! -f "$1" ]] ; then + warn "'$1' not found. Backup skipped." + return + else + _source="$(realpath $1)" + fi + + if [[ -d "$_source" ]]; then + is_directory=true + echononl "Backup directory '$_source' .." + else + echononl "Backup file '$_source' .." + fi + + cp -a "$_source" "${_source}.$backup_date" > $log_file 2>&1 + if [[ $? -eq 0 ]] ; then + echo_ok + if $is_directory ; then + dirs_backuped_arr+=("$_source") + else + files_backuped_arr+=("$_source") + fi + else + echo_failed + error "$(cat "$log_file")" + fi +} + + +# - Remove script generated backups, if source wasn't changed +# - +rm_unchanged_backup() { + + if [[ ${#files_backuped_arr[@]} -gt 0 ]] ; then + for _file in "${files_backuped_arr[@]}" ; do + if $(diff "$_file" "${_file}.$backup_date" > /dev/null 2>&1) ; then + echononl "File '$(basename "${_file}")' wasn't changed.\n Delete the previous generated backup. .." + rm "${_file}.$backup_date" > "$log_file" 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "$(cat "$log_file")" + fi + blank_line + fi + done + fi + if [[ ${#dirs_backuped_arr[@]} -gt 0 ]] ; then + for _dir in "${dirs_backuped_arr[@]}" ; do + if $(diff -Nur "$_dir" "${_dir}.$backup_date" > /dev/null 2>&1) ; then + echononl "Directory '$(basename "${_dir}")' wasn't changed.\n Delete the previous generated backup. .." + rm -rf "${_dir}.$backup_date" > "$log_file" 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "$(cat "$log_file")" + fi + blank_line + fi + done + fi +} + # ---------- @@ -245,6 +328,9 @@ fi # - Give your default values here # - LOGGING=false +BATCH_MODE=false +PARAMETER_1="WERT_1" +PARAMETER_2="WERT_2" if [[ -f "$conf_file" ]]; then source "$conf_file" @@ -254,6 +340,99 @@ else fi +# ---------- +# - Read commandline parameter +# ---------- + +while getopts bh opt ; do + case $opt in + b) BATCH_MODE=true + ;; + h) usage + ;; + \?) usage ;; + esac +done + + +# ---------- +# - Read in parameters given by user +# ---------- + +if $terminal && ! $BATCH_MODE ; then + + echo "" + echo "" + echo -e " \033[1mRead in parameters given by user ..\033[m" + echo "" + + echo "" + echo -e "\033[32m--\033[m" + echo "" + echo " PARAMETER 1 ...." + echo "" + echo -e " Type \033[33m\033[m to accept the default." + echo "" + echo "" + _PARAMETER_1=$PARAMETER_1 + PARAMETER_1="" + echononl "PARAMETER 1 [\033[1m$_PARAMETER_1\033[m]: " + read PARAMETER_1 + if [[ -z "$PARAMETER_1" ]] ; then + PARAMETER_1=$_PARAMETER_1 + fi + + echo "" + echo -e "\033[32m--\033[m" + echo "" + echo " Blank separated list of PARAMETER 2" + echo "" + if [[ -n "$PARAMETER_2" ]]; then + + echo -e " Type \033[33m\033[m to accept the default." + echo "" + echo "" + + _PARAMETER_2=$PARAMETER_2 + PARAMETER_2="" + + echononl "PARAMETER 2 [\033[1m$_PARAMETER_2\033[m]: " + read PARAMETER_2 + if [[ -z "$PARAMETER_2" ]] ; then + PARAMETER_2=$_PARAMETER_2 + fi + else + echo "" + + echononl "\033[1mPARAMETER 2:\033[m " + read PARAMETER_2 + while [[ -z "$(trim "$PARAMETER_2")" ]]; do + echo "Entry for PARAMETER 2 is required! Try again.." + echononl "\033[1mPARAMETER 2: \033[m" + read PARAMETER_2 + done + fi + + echo "" + echo "" + echo -e " \033[32m\033[1mParameter Summary:\033[m" + echo "" + + echo " PARAMETER 1................: $PARAMETER_1" + echo " PARAMETER 2................: $PARAMETER_2" + + echo "" + echononl "Continue with this parameters? [\033[1myes/no\033[m]: " + read OK + while [[ "${OK,,}" != "yes" ]] && [[ "${OK,,}" != "no" ]] ; do + echononl "\033[33mWrong entry!\033[m [\033[1myes/no\033[m]: " + read OK + done + [[ "${OK,,}" = "yes" ]] || fatal "Canceled by user input." + +fi + + # ---------- # - Some pre-script tasks .. # ---------- @@ -265,7 +444,7 @@ if $terminal ; then echo "" fi -echononl "All is fine" +echononl "-- All is fine --" echo_ok @@ -292,4 +471,9 @@ if $terminal ; then echo "" fi + +# - Remove generated backup file if source wasn't changed. +# - +rm_unchanged_backup + clean_up 0