From acbce8304ff26dde2faa4fbb003403b016dc8942 Mon Sep 17 00:00:00 2001 From: "Hahn Axel (hahn)" <axel.hahn@iml.unibe.ch> Date: Fri, 21 Jan 2022 15:49:05 +0100 Subject: [PATCH] couchdb2: fixes with shellcheck --- plugins/localdump/couchdb2.sh | 92 +++++++++++++++++------------------ 1 file changed, 44 insertions(+), 48 deletions(-) diff --git a/plugins/localdump/couchdb2.sh b/plugins/localdump/couchdb2.sh index 8ed3092..358c162 100755 --- a/plugins/localdump/couchdb2.sh +++ b/plugins/localdump/couchdb2.sh @@ -15,10 +15,11 @@ # ./localdump.sh backup couchdb2 demo # 2021-10-11 ..... v1.2 added fastmode in restore: no test connect, do not # delete DB before create request +# 2022-01-20 v1.3 fixes with shellcheck # ================================================================================ -if [ -z $BACKUP_TARGETDIR ]; then - echo ERROR: you cannot start `basename $0` directly +if [ -z "$BACKUP_TARGETDIR" ]; then + echo "ERROR: you cannot start $(basename "$0") directly" rc=$rc+1 exit 1 fi @@ -33,7 +34,7 @@ CFGDIR=~/.iml_backup/couchdb2 # UNUSED # dirPythonPackages=/usr/lib/python2.7/site-packages -ARCHIVE_DIR=`_j_getvar ${JOBFILE} dir-dbarchive`/couchdb2 +ARCHIVE_DIR=$(_j_getvar "${JOBFILE}" dir-dbarchive)/couchdb2 # -------------------------------------------------------------------------------- # FUNCTIONS @@ -51,20 +52,20 @@ function _couchapi(){ # sParams="$sParams -u ${couchdbuser}:${couchdbpw}" sParams="$sParams -X ${method}" sParams="$sParams ${COUCH_URL}${apiurl}" - if [ ! -z $outfile ]; then + if [ ! -z "$outfile" ]; then sParams="$sParams -o ${outfile}" fi - curl $sParams 2>/dev/null + curl "$sParams" 2>/dev/null } function _getDblist(){ - _couchapi GET _all_dbs | sed 's#\"#\n#g' | egrep -v "^(\[|\,|\])$" | grep -v _replicator | grep -v _global_changes + _couchapi GET _all_dbs | sed 's#\"#\n#g' | grep -Ev "^(\[|\,|\])$" | grep -v _replicator | grep -v _global_changes } # get value update_seq of given couchdb name function _getDbSeq(){ # _couchapi GET $1 | sed 's#,\"#\n"#g' | egrep -v "^(\[|\,|\])$" | grep update_seq | cut -f 4 -d '"' - _couchapi GET $1 | sed 's#,\"#\n"#g' | egrep -v "^(\[|\,|\])$" | grep update_seq | cut -f 4 -d '"' | cut -f 1 -d '-' + _couchapi GET "$1" | sed 's#,\"#\n"#g' | grep -Ev "^(\[|\,|\])$" | grep update_seq | cut -f 4 -d '"' | cut -f 1 -d '-' } @@ -72,11 +73,10 @@ function _getDbSeq(){ # get valid configured instances function getInstances(){ - for mycfg in `ls -1 ${CFGDIR}/*${1}*.config` + for mycfg in $(ls -1 ${CFGDIR}/*${1}*.config) do - . $mycfg - if [ $? -eq 0 ]; then - echo `basename "${mycfg}" | cut -f 1 -d "."` + if . "$mycfg"; then + echo $(basename "${mycfg}" | cut -f 1 -d ".") fi done } @@ -87,16 +87,15 @@ function getInstances(){ # param string name of the instance to load function loadInstance(){ COUCH_URL= - . ${CFGDIR}/${1}.config - if [ $? -ne 0 ]; then + if ! . "${CFGDIR}/${1}.config"; then color error echo ERROR: invalid instance: $1 - the config file cannot be sourced color reset exit 1 fi - if [ -z ${COUCH_URL} ]; then + if [ -z "${COUCH_URL}" ]; then color error - echo ERROR: invalid instance: $1 - the config file has no COUCH_URL + echo "ERROR: invalid instance: $1 - the config file has no COUCH_URL" color reset exit 1 fi @@ -110,14 +109,12 @@ function loadInstance(){ # param 1 string globbing filter to config files function doBackup(){ # for mycfg in `ls -1 ~/.iml_backup/couchdb/*.config` - for COUCHDB_INSTANCE in `getInstances $1` + for COUCHDB_INSTANCE in $(getInstances $1) do - loadInstance $COUCHDB_INSTANCE + loadInstance "$COUCHDB_INSTANCE" - echo --- instance: $COUCHDB_INSTANCE - curl --head -X GET $COUCH_URL 2>/dev/null | grep "^HTTP.*\ 200\ " - - if [ $? -eq 0 ]; then + echo "--- instance: $COUCHDB_INSTANCE" + if curl --head -X GET "$COUCH_URL" 2>/dev/null | grep "^HTTP.*\ 200\ "; then echo OK, connected. sleep 2 _doBackupOfSingleInstance @@ -125,14 +122,14 @@ function doBackup(){ else rc=$rc+1 color error - echo ERROR: couch DB instance is not available or canot be accessed with these credentials in config file + echo "ERROR: couch DB instance is not available or canot be accessed with these credentials in config file" # repeat curl to show the error message - curl -X GET $COUCH_URL + curl -X GET "$COUCH_URL" color reset fi echo - echo --- `date` done. + echo "--- $(date) done." echo done } @@ -143,11 +140,11 @@ function doBackup(){ function _doBackupOfSingleInstance(){ create_targetdir - mkdir -p ${BACKUP_TARGETDIR}/${COUCHDB_INSTANCE} 2>/dev/null - mkdir -p ${ARCHIVE_DIR}/${COUCHDB_INSTANCE}/seq 2>/dev/null + mkdir -p "${BACKUP_TARGETDIR}/${COUCHDB_INSTANCE}" 2>/dev/null + mkdir -p "${ARCHIVE_DIR}/${COUCHDB_INSTANCE}/seq" 2>/dev/null - local ARCHIVE_DIR2=${ARCHIVE_DIR}/${COUCHDB_INSTANCE}/deleted_databases - test -d "${ARCHIVE_DIR2}" || mkdir -p ${ARCHIVE_DIR2} 2>/dev/null + local ARCHIVE_DIR2="${ARCHIVE_DIR}/${COUCHDB_INSTANCE}/deleted_databases" + test -d "${ARCHIVE_DIR2}" || mkdir -p "${ARCHIVE_DIR2}" 2>/dev/null echo echo " MOVE deleted databases into ${ARCHIVE_DIR2}" @@ -155,25 +152,24 @@ function _doBackupOfSingleInstance(){ # get a list of current databases dblist=/tmp/couch_list_${COUCHDB_INSTANCE}.txt - _getDblist > $dblist - ls -l $dblist + _getDblist > "$dblist" + ls -l "$dblist" # detect deleted databases: - for dumpfile in $( find ${ARCHIVE_DIR}/${COUCHDB_INSTANCE}/ -maxdepth 1 -type f -name "*.couchdbdump.gz" ) + for dumpfile in $( find "${ARCHIVE_DIR}/${COUCHDB_INSTANCE}/" -maxdepth 1 -type f -name "*.couchdbdump.gz" ) do dbname=$( basename $dumpfile | sed "s#\.couchdbdump\.gz##g" ) - grep "^${dbname}" $dblist >/dev/null - if [ $? -ne 0 ]; then + if ! grep "^${dbname}" "$dblist" >/dev/null; then SEQFILE=${ARCHIVE_DIR}/${COUCHDB_INSTANCE}/seq/__seq__${dbname} echo "DELETED $dbname ... $( ls -l ${dumpfile} | cut -f 5- -d ' ' )" - mv ${dumpfile} ${ARCHIVE_DIR2} - rm -f ${SEQFILE} + mv "${dumpfile}" "${ARCHIVE_DIR2}" + rm -f "${SEQFILE}" fi done # done | tee /tmp/couch_archive_${COUCHDB_INSTANCE}.txt echo - typeset -i iDbTotal=$( cat $dblist | wc -l ) + typeset -i iDbTotal=$( cat "$dblist" | wc -l ) typeset -i iDb=0 echo @@ -182,48 +178,48 @@ function _doBackupOfSingleInstance(){ echo " ARCHIVE ${ARCHIVE_DIR}/${COUCHDB_INSTANCE}" echo - for dbname in $( cat $dblist ) + for dbname in $( cat "$dblist" ) do iDb=$iDb+1 - echo -n "----- `date` ${COUCHDB_INSTANCE} -- $iDb of $iDbTotal - ${dbname} - " - OUTFILE=${BACKUP_TARGETDIR}/${COUCHDB_INSTANCE}/`get_outfile ${dbname}`.couchdbdump + echo -n "----- $(date) ${COUCHDB_INSTANCE} -- $iDb of $iDbTotal - ${dbname} - " + OUTFILE=${BACKUP_TARGETDIR}/${COUCHDB_INSTANCE}/$(get_outfile "${dbname}").couchdbdump ARCHIVFILE=${ARCHIVE_DIR}/${COUCHDB_INSTANCE}/${dbname}.couchdbdump.gz SEQFILE=${ARCHIVE_DIR}/${COUCHDB_INSTANCE}/seq/__seq__${dbname} - sSequenceCurrent=`_getDbSeq ${dbname}` - sSequenceLast=`cat ${SEQFILE} 2>/dev/null | cut -f 1 -d '-'` + sSequenceCurrent=$(_getDbSeq "${dbname}") + sSequenceLast=$(cat "${SEQFILE}" 2>/dev/null | cut -f 1 -d '-') # sSequenceLast=`cat ${SEQFILE} 2>/dev/null | tr -d '\n'` # echo # echo "update_seq --+-- current [${sSequenceCurrent}]" # echo " +-- backup [${sSequenceLast}]" if [ "${sSequenceCurrent}" = "${sSequenceLast}" ]; then - echo SKIP: still on sequence ${sSequenceLast} + echo SKIP: still on sequence "${sSequenceLast}" else echo echo "update_seq --+-- current [${sSequenceCurrent}]" echo " +-- backup [${sSequenceLast}]" echo -n "Need to backup ... " - couchbackup --db ${dbname} >${OUTFILE}.progress 2>/dev/null && mv ${OUTFILE}.progress ${OUTFILE} + couchbackup --db "${dbname}" >"${OUTFILE}".progress 2>/dev/null && mv "${OUTFILE}".progress "${OUTFILE}" fetchrc # $myrc is last returncode - set in fetchrc if [ $myrc -eq 0 ]; then echo -n "gzip ... " - compress_file $OUTFILE + compress_file "$OUTFILE" fetchrc if [ $myrc -eq 0 ]; then - cp ${OUTFILE}* ${ARCHIVFILE} && echo ${sSequenceCurrent}>${SEQFILE} - ls -l ${ARCHIVFILE} ${SEQFILE} + cp "${OUTFILE}"* "${ARCHIVFILE}" && echo "${sSequenceCurrent}">"${SEQFILE}" + ls -l "${ARCHIVFILE}" "${SEQFILE}" fi else echo "ERROR occured while dumping - abort" fi - ls -l $OUTFILE* + ls -l "$OUTFILE"* echo fi done - rm -f $dblist + rm -f "$dblist" } # ---------- RESTORE -- GitLab