Erreur script bash

bash
script
Tags: #<Tag:0x00007f092b7d6b18> #<Tag:0x00007f092b7d5d80>

#1

Bonjour ,

J’ai récupéré un script de sauvegarde de base de données mysql mais j’ai une erreur quand je l’execute

Voici l’erreur :

/usr/local/sbin/mysqlbackup.sh: 27: /usr/local/sbin/mysqlbackup.sh: Syntax error: Unterminated quoted string

Voici le script en question :

#!/bin/bash
# Configuration de base: datestamp e.g. YYYYMMDD

DATE=$(date +"%Y%m%d")

# Identifiants MySQL
MYSQL_USER="root"
MYSQL_PASSWORD="PASSWORD"


BACKUP_DIR="/home/user/mysql

# Commandes MySQL (aucune raison de modifier ceci)

MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldum

# Bases de données MySQL à ignorer

SKIPDATABASES="Database|information_schema|performance_schema|mysql"

RETENTION=14

# ---- NE RIEN MODIFIER SOUS CETTE LIGNE ------------------------------------------
#
# Create a new directory into backup directory location for this date
mkdir -p $BACKUP_DIR/$DATE

# Retrieve a list of all databases
databases=`$MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "($SKIPDATABASES)"`

# Dumb the databases in seperate names and gzip the .sql file

for db in $databases; do
echo $db

$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --skip-lock-tables --events --databases $db | gzip > "$BACKUP_DIR/$DATE/$db.sql.gz"
done

# Remove files older than X days

#ci dessous ligne 27 ou il y a l'erreur
find $BACKUP_DIR/* -mtime +$RETENTION -delete

Merci pour votre aide

Cordialement


#2

Bonjour Bratock

C’est sans doute le caractère doubles guillemets
qui manque à la fin de la ligne N°11 :

…
BACKUP_DIR="/home/user/mysql
…

Il faudrait dont remplacer la ligne ci-dessus
par celle ci-dessous :

BACKUP_DIR="/home/user/mysql"

#3

Ca a corriger l’erreur mais j’en ai d’autre qui sont apparue

: not foundscript/kinamo_mysqlbackup.sh: 1: /home/dump/script/kinamo_mysqlbackup.sh: /usr/bin/mysql
/home/dump/script/kinamo_mysqlbackup.sh: 21: /home/dump/script/kinamo_mysqlbackup.sh: Syntax error: word unexpected (expecting "do")

Merci d’avance

Cordialement


#4

La première ligne de ce message d’erreurs semble incohérente :
On dirait qu’une ligne a “écrasé” une autre ligne de ce message d’erreurs.


Dans le contenu du script /usr/local/sbin/mysqlbackup.sh cité dans ton premier message,
je ne trouve aucune ligne de commande faisant référence à un autre script nommé
/home/dump/script/kinamo_mysqlbackup.sh
dont les erreurs citées dans ton dernier message semblent provenir


Désolé, je suis “perdu” et je ne sais pas du tout comment t’aider.


#5

Merci a vous de vous etre penché sur mon probleme

en fait voila l’erreur

-bash: /home/dump/script/kinamo_mysqlbackup.sh: /bin/bash^M: bad interpreter: No such file or directory

merci à vous

Cordialement


#6

Bonjour Bratock

hummmm! J’ai comme l’impression que le script /home/dump/script/kinamo_mysqlbackup.sh
a été créé avec un éditeur de texte lancé depuis un système Windows.


Il faudrait que tu copies/colles dans ton prochain message
le retour de la ligne de commandes suivante :

head -n5 /home/dump/script/kinamo_mysqlbackup.sh | hd

Merci.


#7

Voici le retur de la ligne de commande que vous m’avez demandé

00000000  23 21 2f 62 69 6e 2f 62  61 73 68 0d 0a 23 20 43  |#!/bin/bash..# C|
00000010  6f 6e 66 69 67 75 72 61  74 69 6f 6e 20 64 65 20  |onfiguration de |
00000020  62 61 73 65 3a 20 64 61  74 65 73 74 61 6d 70 20  |base: datestamp |
00000030  65 2e 67 2e 20 59 59 59  59 4d 4d 44 44 0d 0a 44  |e.g. YYYYMMDD..D|
00000040  41 54 45 3d 24 28 64 61  74 65 20 2b 22 25 59 25  |ATE=$(date +"%Y%|
00000050  6d 25 64 22 29 0d 0a 23  20 49 64 65 6e 74 69 66  |m%d")..# Identif|
00000060  69 61 6e 74 73 20 4d 79  53 51 4c 0d 0a 4d 59 53  |iants MySQL..MYS|
00000070  51 4c 5f 55 53 45 52 3d  22 72 6f 6f 74 22 0d 0a  |QL_USER="root"..|
00000080

Merci à vous

Et vous avez raison j’ai modifié le script sous éditeur de txt Windows.

Cordialement


#8

Oui, c’était bien ça le problème :
La suite de caractères de fin de ligne des fichiers texte créés sous Windows est 0d0a
alors que le caractère de fin de ligne des fichiers texte de type Unix est seulement : 0a


Pour convertir les caractères de fin de ligne Windows de ton fichier
/home/dump/script/kinamo_mysqlbackup.sh
en caractère de fin de ligne Unix,
il te faudrait entrer la ligne suivante :

sed -i 's/\x0D$//' /home/dump/script/kinamo_mysqlbackup.sh

#9

Oui vous avez raison !

j’ai resaisi le script directement dan la console et plus d’erreur.

Merci à vous pour votre aide

Cordialement


#10

C’est assez traître comme histoire,
parce que ça ne se voit pas toujours à l’affichage.


Avec certains éditeurs de texte (Windows et Linux),
il existe une option qui permet de choisir
entre le type de caractère de fin de ligne UNIX ou Windows


#11

Oui c’est traitre, car j’ai utilisé le txt de base sans option de mise en page (bloc-note) donc ca ne se voyait pas à l’oeil nu.

Merci en tout cas

Cordialement


#12

Notepadd++ permet de choisir le caractère de fin de ligne utilisé, dans le footer de la fenêtre de N++, après les informations nombre de lignes, longueur de la ligne, etc. on peut choisir les fins de ligne ‘Windows (CR LF)’ ou ‘Convertir en format Unix (LF)’


#13

Merci à vous tous mon probleme est résolu

Cordialement