muku1
Anmeldungsdatum: 1. Juni 2012
Beiträge: 19
|
Hallo zusammen, leider habe ich ein Problem bei meinen Script.
Ich bekomme folgende Fehlermeldung: Syntax error: word unexpected (expecting "do") Hier der Betroffene Teil: | for database in $DBS; do
SCHEMA=$DIR/$database.schema.gz
DATA=$DIR/$database.data.gz
# export data from postgres databases to plain text
$PGDUMP -C -c -s $database | gzip -9 > $SCHEMA
# dump data
$PGDUMP -a $database | gzip -9 > $DATA
done
|
Ich hoffe ihr könnt mir helfen. Mfg
muku
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21852
Wohnort: Lorchhausen im schönen Rheingau
|
Entweder du schreibst oder
|
muku1
(Themenstarter)
Anmeldungsdatum: 1. Juni 2012
Beiträge: 19
|
redknight schrieb: Entweder du schreibst oder
Danke für deine Antwort. Schon probiert aber leider erhalte ich weiterhin die gleiche Fehlermeldung.
Hast du vielleicht noch eine Idee? Mfg
muku //edit: Ich habs oben im Code korregiert!
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21852
Wohnort: Lorchhausen im schönen Rheingau
|
Kommt drauf an, was in $DBS steht. Kann da evtl ein Semikolon vorkommen?
|
muku1
(Themenstarter)
Anmeldungsdatum: 1. Juni 2012
Beiträge: 19
|
redknight schrieb: Kommt drauf an, was in $DBS steht. Kann da evtl ein Semikolon vorkommen?
Hallo, nein es steht kein semikolon in $DBS ! Hier mal zur Vervollständigung das Ganze Script:
Ich hoffe du findest das Problem 🙄 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 | #!/bin/sh
DUMPALL="/usr/bin/pg_dumpall"
PGDUMP="/usr/bin/pg_dump"
PSQL="/usr/bin/psql"
# directory to save backups in, must be rwx for user postgres
BASE_DIR="/opt/path/"
YMD=$(date "+%Y-%m-%d")
DIR="$BASE_DIR/$YMD"
mkdir -p $DIR
cd $DIR
# list of databases
DBS=$($PSQL -l -t | egrep -i 'db_t|db_l' | awk '{print $1}'
# first dump entire postgres database, including pg_shadow etc.
$DUMPALL -D | gzip -9 > "$DIR/db.out.gz"
# Dump only global objects (roles and tablespaces), no databases
$DUMPALL -g | gzip -9 > "$DIR/globals.gz"
# now loop through each individual database and backup the schema and data separately
for database in $DBS; do
SCHEMA=$DIR/$database.schema.gz
DATA=$DIR/$database.data.gz
# export data from postgres databases to plain text
$PGDUMP -C -c -s $database | gzip -9 > $SCHEMA
# dump data
$PGDUMP -a $database | gzip -9 > $DATA
done
# delete backup files older than 30 days
# find search for files in a directory hierarchy
# -type d = character (unbuffered) special
OLD=$(find $BASE_DIR -type d -mtime +30)
if [ -n "$OLD" ] ; then
echo deleting old backup files: $OLD
echo $OLD | xargs rm -rfv
fi
|
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21852
Wohnort: Lorchhausen im schönen Rheingau
|
hihi, Zeilenumbrüche in variablen sind aber nicht schön. | for database in ${DBS[@]}; do
|
sollte es sein. Bevor du loslegst, teste deine Befehle erst mit echo, ob da valide ausgaben kommen 😉
|
muku1
(Themenstarter)
Anmeldungsdatum: 1. Juni 2012
Beiträge: 19
|
redknight schrieb: hihi, Zeilenumbrüche in variablen sind aber nicht schön. | for database in ${DBS[@]}; do
|
sollte es sein. Bevor du loslegst, teste deine Befehle erst mit echo, ob da valide ausgaben kommen 😉
Danke für deine Antwort, wie genau hast du dir das mit echo vorgestellt?
Ich hab versucht das Script mit folgendem Befehl zu prüfen: | sh -n /pfad/scriptname.sh
|
PS: Auch das Ändern wie in deinem deinem Vorschlag, brachte kein positives Ergebnis. Weiterhin gleiche Fehlermeldung. Gruß
muku
|
amilaggin
Anmeldungsdatum: 7. Juni 2012
Beiträge: 156
|
Fehlt da nicht etwas am Ende in Zeile 15?
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21852
Wohnort: Lorchhausen im schönen Rheingau
|
amilaggin schrieb: Fehlt da nicht etwas am Ende in Zeile 15?
Guter Punkt, hab ich übersehen 😉 Da fehlt in der tat die schließende Klammer. muku1 schrieb: Danke für deine Antwort, wie genau hast du dir das mit echo vorgestellt?
Mach aus SCHEMA=$DIR/$database.schema.gz ein echo "SCHEMA=$DIR/$database.schema.gz" zB, um sicherzugehen, dass die Ausgaben rauskommen, die du gerne ausführen willst. PS: Auch das Ändern wie in deinem deinem Vorschlag, brachte kein positives Ergebnis. Weiterhin gleiche Fehlermeldung.
Dann solltest Du zum Beispiel mal prüfen, was Zeile15 überhaupt ausgibt, also ohne es in eine Variable zu schreiben.
|
muku1
(Themenstarter)
Anmeldungsdatum: 1. Juni 2012
Beiträge: 19
|
amilaggin schrieb: Fehlt da nicht etwas am Ende in Zeile 15?
Hallo amilaggin,
vollög richtig, da fehlt die zu schließende Klammer.
Aber leider weiterhin gleiche Fehlermeldung ☹
|
muku1
(Themenstarter)
Anmeldungsdatum: 1. Juni 2012
Beiträge: 19
|
redknight schrieb: amilaggin schrieb: Fehlt da nicht etwas am Ende in Zeile 15?
Guter Punkt, hab ich übersehen 😉 Da fehlt in der tat die schließende Klammer. muku1 schrieb: Danke für deine Antwort, wie genau hast du dir das mit echo vorgestellt?
Mach aus SCHEMA=$DIR/$database.schema.gz ein echo "SCHEMA=$DIR/$database.schema.gz" zB, um sicherzugehen, dass die Ausgaben rauskommen, die du gerne ausführen willst. PS: Auch das Ändern wie in deinem deinem Vorschlag, brachte kein positives Ergebnis. Weiterhin gleiche Fehlermeldung.
Dann solltest Du zum Beispiel mal prüfen, was Zeile15 überhaupt ausgibt, also ohne es in eine Variable zu schreiben.
Also Zeile 15 gibt definiv was aus, nämlich die zu sicherenden Datenbanken (getestet).
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21852
Wohnort: Lorchhausen im schönen Rheingau
|
muku1 schrieb: Also Zeile 15 gibt definiv was aus, nämlich die zu sicherenden Datenbanken (getestet).
Und in welcher Form? Bitte lass dir nicht jede klitzekleine Information aus den Fingern ziehen
|
muku1
(Themenstarter)
Anmeldungsdatum: 1. Juni 2012
Beiträge: 19
|
redknight schrieb: muku1 schrieb: Also Zeile 15 gibt definiv was aus, nämlich die zu sicherenden Datenbanken (getestet).
Und in welcher Form? Bitte lass dir nicht jede klitzekleine Information aus den Fingern ziehen
Sorry, also bei Eingabe von
| sudo -u postgres psql -l -t | egrep -i 'dma_test|dma_live' | awk '{print $1}'
|
bekomme folgende Ausgabe:
| [sudo] password for ksroot:
could not change directory to "/home/ksroot"
db_t
|
//edit: Ich hab den Fehler! Ich hatte das Script in Windows erstellt und darin lag der Fehler.
Im Script waren unsichtbar zeichen (wg. der Kodierung in meinen Fall ANSI). Ich hab das Script neu in ubuntu erstellt und viele der Fehler waren verschwunden.
Wie man sein Script mit vim bereinigen kann steht hier http://www.linuxquestions.org/questions/slackware-14/bin-bash%5Em-bad-interpreter-no-such-file-or-directory-461400/ Viele Grüße und danke für die Hilfe
muku
|