web-dev-qa-db-fra.com

"Erreur de syntaxe: chaîne entre guillemets non terminée"

J'essaie d'utiliser un script de sauvegarde qui sauvegardera les fichiers de ma base de données SQL et de mon site Web. J'utilise Ubuntu 12.04 version 32 bits et zPanel.

Aussi quelles sont ces variables:

MYSQL = "$ ()"
MYSQLDUMP = "$ ()"
GZIP = "$ ()"

Je suppose que le premier est le nom de la base de données.

Voici le script:

#!/bin/sh
#----------------------------------------------------------------
# Daily Backup Routine - Backup and Sync to Dropbox
# This script creates a backup using today's date, then deleted
# any backups made 3 days ago. If run every day it will ensure
# you have a week's worth of backups of your MySQL databases and
# zPanel web directories. 
#
# Uses whatever Dropbox account is running on the server.
#
# Written by Richard Ferreira for the backup of zPanel websites.
# Contact me - richard[at]beetle001.com
#----------------------------------------------------------------
#
# Before we get started, we should set some parameters. We'll need these for later.
# The webserver's datafiles:
WEBDIR="/var/zpanel/hostdata/"
# Where do we want the backup to go?  (SET THIS - IT'S A TEMP FOLDER)
BACKUP="/root/backup-temp"
# Where is our dropbox folder? (SET THIS TO YOUR ABSOLUTE BACKUP PATH)
DROPBOX="/root/Dropbox/Backups
# What do we want our date to look like?
NOW=$(date +"%d-%m-%Y")
# We need to know the date 3 days ago to purge any backups that were made 3 days ago.
# This ensures we don't keep unnecessarily old backups.
# It doesn't matter if it skips one every now and then - we'll just have to check manually from time to time.
# If you want to keep more days backups, change the "3 days ago" to "x days ago"
DAYSAGO=$(date --date="3 days ago" +"%d-%m-%Y")
# What should our file backup look like?
WEBFILE="webdirs-full-$NOW.tar.gz"
# Our MySQL Login information and some paths (we'll use 'which' to make sure we get them):
SQLUSER="root"
# Don't forget to change the root password here!
SQLPASS="xxxxxxxxxxxx"
SQLHOST="localhost"
MYSQL="$(db-name)"
MYSQLDUMP="$(db-name)"
GZIP="$(.gz)"
#
# Let's just, for sanity's sake, make sure our temp backup folder exists.
mkdir $BACKUP
# DON'T EDIT ANYTHING BELOW THIS LINE
#----------------------------------------------------------------
# Now let's start!
# Let's get the databases that we want to backup.
DBS="$($MYSQL -u $SQLUSER -h $SQLHOST -p$SQLPASS -Bse 'show databases')"
# Now let's dump them to .sql files and put them in our backup directory.
for db in $DBS
do
FILE=$BACKUP/mysql-$db.$NOW.gz
$MYSQLDUMP -u $SQLUSER -h $SQLHOST -p$SQLPASS $db | $GZIP -9 > $FILE
done
#
# Let's shove the whole webserver directory into a tarball and throw that in with the sql files:
tar -zcvf /root/backup/$WEBFILE $WEBDIR
# That's all done - we should put the backups on Copy by putting them into our Copy folder.
# First let's make a folder for today.
mkdir $DROPBOX/$NOW
# Copy our backups into it.
cp -R $BACKUP/* $DROPBOX/Asterix/$NOW
# We can delete the backup we made 3 days ago from Copy now.
rm -rf $DROPBOX/$DAYSAGO
# And clear out the temporary director for next time.
rm $BACKUP/*
# Job well done!
# Have a beer and relax!

Voici mon problème: lorsque j'essaie d'exécuter le script, le message d'erreur suivant s'affiche: ./backup.sh: 66: ./backup.sh: Erreur de syntaxe: chaîne entre guillemets non terminée

Si quelqu'un pouvait m'aider avec ça, je l'apprécierais beaucoup!

3
Hamza

La ligne avec

DROPBOX="/root/Dropbox/Backups

n'a pas de " à la fin.

Les variables MYSQL, MYSQLDUMP et GZIP font référence aux programmes utilisés pour exécuter diverses commandes. Donc, ils devraient contenir le chemin de ces programmes:

MYSQL="/usr/bin/mysql"
MYSQLDUMP="/usr/bin/mysqldump"
GZIP="/bin/gzip"

Vous pouvez utiliser la sortie de which <program name> pour voir ce qu'il faut mettre là:

$ which mysql
/usr/bin/msql
$ which gzip
/bin/gzip
7
muru