I'm working on a script I wrote called backup.sh
when I run it like this:
. ./backup.sh
I get this error:
ksh: ./backup.sh[124]: no closing quote
when I run it this way:
backup.sh
I get this error:
backup.sh: 28: Syntax error: end of file unexpected (expecting "fi")
I looked through the code over and over (the entire script) and can't find any mismatching quotes or badly nested if statements. I don't have a strong enough understanding to know why one way is better or worse, and why either of them should be handled differently by the shell (I'm guessing they're being handled differently, otherwise they wouldn't have different output, right?)
Any help would be greatly appreciated. In-case this requires a look at the code:
#!/bin/sh
toBackUpDir="./tmp" #DIRECTORY TO BE BACKED UP
toBackUp="$toBackUpDir/*" #PATH TO BE BACKED UP
landingDir="./download/" #PATH FOR *.TGZ BACKUP TO BE STORED
sql_bDir="./sql_backups/"
#ERROR CHECK, DOES SPECIFIED LANDING DIRECTORY EXIST; ANY OLD BACKUPS?
echo "Checking for specified landing directory: $landingDir"
if [ -d $landingDir ]
then
echo "Directory $landingDir is present and ready to receive backup."
echo "Checking that $landingDir does not contain old backup files."
tarCheck=`ls $landingDir | grep -i *tar*` #CHECKS IF ANY TAR IS SITTING IN DESTINATION FOLDER
echo "The variable \$tarCheck returns:" $tarCheck #TEST OF VARIABLE
# ERROR CHECK, ANY PREVIOUS BACKUPS STILL HERE?
if [ -z $tarCheck ]
then
echo "Continuing backup sequence, as there are no old tars in the backup directory $landingDir"
work="STARTING"
echo "BEFORE NESTED ELSE"
else
echo "I am not ready to backup, first download and delete the above mentioned contents of the $landingDir landing directory."
work="NOT starting"
echo "AFTER NESTED ELSE"
fi #ENDIF FOR ERROR CHECKING
echo "AFTER NESTED IF"
else
echo "Directory $landingDir does not exist, creating it now"
work="STARTING"
mkdir $landingDir
fi #ENDIF LANDING DIR. CHECK
# MAIN MODULE: PARAMETERS, ERROR CHECK, TAR, GZIP
if [ $work = "STARTING" ]
then
#OLD WAY: #fileName=`date | sed -n s/ /_/g p | sed -n s/^/Backup_/p | sed -n s/$/\.tgz/p | sed -n s/^
/$landingDir/p` #NAME OF BACKUP FILE
fileName=`date | sed -n s/ /_/g p`
fileName=${landingDir}Backup_${fileName}.tgz #NEW WAY #NAME OF BACKUP FILE
#ERROR CHECK, DOES LOCATION TO BE BACKED UP EXIST?
echo "The variable \$toBackUpDir (directory of files to be backed up) is: $toBackUpDir"
echo "Making sure above said target exists: $toBackUpDir"
if [ -d $toBackUpDir ]
then
echo "Directory $toBackUpDir does indeed exist and is present for backing up."
#CONTINUE PROGRAM
echo "The variable \$fileName will be:" $fileName
#START SQL BACKUP + TGZ
#MYSQL LANDING DIR. CHECK
echo "Checking if sql backup landing directory exists: $sql_bDir"
if [ -d $sql_bDir ]
then
echo "Database backup directory exists"
else
echo "Database backup directory does not exist, creating it"
mkdir $sql_bDir
fi #ENDIF SQL DIR. CHECK
# MYSQL BACKUP
sql_bName=`date | sed -n s/ /_/g p | sed -n s/^/SqlBackup_`
echo "The variable \$sql_bName will be $sql_bName" #TEST OF SQL NAME VARIABLE
#mysqldump -uxxxxxx -pxxxxxx --opt information_schema > /$sql_bDir/$sql_bName.tgz
# MYSQL CLEAN-UP < 10 FILES
# CODE TO CLEAN UP OLDEST OF LISTING (ls -la)
# THAT AMOUNTS TO GREATER THAN 10 ITEMS
echo "Below are the files placed in final back up:" #EXPLANATION FOR USER
tar zcvf "$fileName" $toBackUp #CREATE TGZ
#DECLARE BACKUP FINISHED
echo " " #VISUAL PADDING
echo "Final back-up ready for download in, including \"information_schema\" database: $landingDir"
else
echo "ERROR:"
echo " Directory $toBackUpDir does not exist."
echo " Make sure my starting parameters are properly set."
echo "Backup sequence ended early."
fi #ENDIF BACKUP DIR. CHECK
fi #ENDIF FOR MAIN MODULE