Varibalen auslesen

Lord_Icon

Member
Daten1=/srv
Daten2=/var/log/email
Daten3=/etc
Daten4=/home

Frage:
Wie bekomme ich diese Daten nun EINZELN in diesen Befehl implentiert ?

tar -czvf test-backup-1.tar -g zeitstempel $Daten****

Ich könnte den Befehl jetzt 4 mal ausgeben lassen... aber das wäre dumm.
Ausserdem will ich diese Variablen in den Kopf schreiben, so dass ich schnell mal z.B. Daten5 hinzufügen kann, ohne gleich den tar Befehl erneut kopieren zu müßen.

Kann mir einer auf die Sprünge helfen ?
 
Hi,

Code:
for i in `seq 1 200`; do tar -czvf test-backup-1.tar -g zeitstempel $Daten$i;done;

Pass die 200 an Dein erwartetes Maximum an :)


-W
 
Last edited by a moderator:
hmm.... mach ich was falsch ?
Bei der direkten Eingabe in der Shell =

Code:
Daten1=/srv/backup
Daten2=/srv/ftp
Daten3=/srv/www

for i in seq 1-200;
  do 
    tar -czvf test-backup-$i.tar -g zeitstempel $Daten$i;
  done;

bekomme ich =

tar: seq: Kann stat nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: seq: Kann stat nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: Fehler beim Beenden, verursacht durch vorhergehende Fehler.
tar: 1-200: Kann stat nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: 1-200: Kann stat nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: Fehler beim Beenden, verursacht durch vorhergehende Fehler.
 
Hi,

gibts ein 'tar' bei Dir? "which tar"

Ist 'tar' innerhalb Deiner $PATH-Variable?

Wenn Du beide Fragen mit "Ja" beantwortest, dann ist wohl Dein gewähltes Limit größer, als die aktuellen Dateien.
Beachte aber auch meinen EDIT... hatte mich im ersten Post verhauen.


-W
 
ahh... was die kleinen `` doch alles bewirken können

Aber leider klappt es immer noch nicht so ganz

Code:
#!/bin/bash

PATH=/usr/local/bin:/usr/bin:/bin:/bin/tar

Daten1=/srv/backup
Daten2=/srv/ftp
Daten3=/srv/www

for i in `seq 1-5`
  do
    tar -czvf test-backup-$i.tar -g zeitstempel $Daten$i
  done


seq: ungültiges Fließkommaargument: 1-5
»seq --help« gibt weitere Informationen.


Aber tar kann ich von jedem Pfad ausführen. Aber ich hab es sicherheitshalber nochmal mit in das Script eingebunden
 
ach.. is das kompliziert.
Aber wir sind schon nahe :-)

Code:
Daten1"/srv/backup/"
Daten2=`/srv/ftp`
Daten3=/srv/www

for i in `seq 1 3`
  do
    tar -czvf test-backup-$i.tar -g zeitstempel $Daten$i
  done

tar: 1: Kann stat nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: 1: Kann stat nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: Fehler beim Beenden, verursacht durch vorhergehende Fehler.
tar: 2: Kann stat nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: 2: Kann stat nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: Fehler beim Beenden, verursacht durch vorhergehende Fehler.
tar: 3: Kann stat nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: 3: Kann stat nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: Fehler beim Beenden, verursacht durch vorhergehende Fehler.


Hab doch nun alle Möglichkeiten ausprobiert, wie man ne Variale übergibt.

Edit: Also hochgezählt wird es. Die Datein selbst werden angelegt. Nur werden die Pfade anscheint nicht richtig ausgegeben.
/srv/backup und die anderen beiden Pfade gibt es aber 100%tig

Code:
-rw-r--r-- 1 root root   45  2. Mai 04:12 test-backup-1.tar
-rw-r--r-- 1 root root   45  2. Mai 04:12 test-backup-2.tar
-rw-r--r-- 1 root root   45  2. Mai 04:12 test-backup-3.tar

Code:
dir /srv
insgesamt 36
drwxr-xr-x 6 root root 4096  2. Mai 01:47 backup
drwxr-xr-x 2 root root 4096 21. Sep 2007  ftp
-rwxrwxrwx 1 root root  141  2. Mai 04:12 test
-rw-r--r-- 1 root root   45  2. Mai 04:12 test-backup-1.tar
-rw-r--r-- 1 root root   45  2. Mai 04:12 test-backup-2.tar
-rw-r--r-- 1 root root   45  2. Mai 04:12 test-backup-3.tar
-rw-r--r-- 1 root root   45  2. Mai 04:12 test-backup-seq
drwxr-xr-x 4 root root 4096  1. Mai 17:38 www
-rw-r--r-- 1 root root   36  2. Mai 04:12 zeitstempel
 
Last edited by a moderator:
Auch nicht mit Tricksen läßt sich der Pfad zusammensetzen

Code:
Ordner=Daten
Daten1=/srv/backup/
Daten2=/srv/ftp
Daten3=/srv/www

for i in `seq 1 3`
  do
    tar -czvf test-backup-$i.tar -g zeitstempel $Ordner$i
  done


Und die sonst üblichen { } scheinen hier auch nicht zu klappen.

Code:
Ordner=Daten
Daten1=/srv/backup/
Daten2=/srv/ftp
Daten3=/srv/www

for i in `seq 1 3`
  do
    tar -czvf test-backup-$i.tar -g zeitstempel $[COLOR="Red"][B]{[/B][/COLOR]Ordner[B][COLOR="Red"]}[/COLOR][/B]$i
  done


DAS klappt aber
Code:
Daten1=/srv/backup/
Daten2=/srv/ftp
Daten3=/srv/www

for i in `seq 1 3`
  do
    tar -czvf test-backup-$i.tar -g zeitstempel [COLOR="Red"][B]${Daten1}[/B][/COLOR]
  done

hmmm..... **ärger**
 
Last edited by a moderator:
AHHHH


Code:
Daten1=/srv/backup/
Daten2=/srv/ftp
Daten3=/srv/www

for i in `seq 1 3`
  do
    
echo $Daten$i


  done


Nur hören jetzt meine Script Erfahrungen auf... jetzt is mehr billiges Basteln und beten, das was richitiges rauskommt. Von können (meinerseits) kann man hier wohl nicht mehr sprechen **cry**
 
Last edited by a moderator:
Code:
Daten1=abc

# das ist klar:

echo $Daten1

# Und das auch:

i=1
echo $Daten$i

# harauskommt:

1

# sicher? $Daten ist überigends eine variable, die nicht definiert ist. nichts plus 1 ist 1. Tjo, und $Daten1 ist es schonmal gar nicht.

eval echo \$Daten$i

# Ergebis: abc
# aaaah.... :-)
 
Last edited by a moderator:
nope. geht leider auch nicht.

Das gekürzte Script = und nur das is drin, geht leider auch nicht

Code:
Daten1=/srv/backup/
Daten2=ftp
Daten3=/srv/www

for i in `seq 1 3`
  do
    tar -czvf test-backup-$i.tar -g zeitstempel \$Daten$i
  done

tar: $Daten1: Kann stat nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: $Daten1: Kann stat nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: Fehler beim Beenden, verursacht durch vorhergehende Fehler.
tar: $Daten2: Kann stat nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: $Daten2: Kann stat nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: Fehler beim Beenden, verursacht durch vorhergehende Fehler.
tar: $Daten3: Kann stat nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: $Daten3: Kann stat nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: Fehler beim Beenden, verursacht durch vorhergehende Fehler.

Allerdings geht das hier

# Daten1=abc
# i=1
# eval echo \$Daten$i

Ausgabe: abc

Da haut es ja hin. Nur wie bekomme ich das in die for Schleife rein. Denn da scheint ja irgendwas anders zu gelten... zumindest zeigt er mir dann Daten1 an, statts das, was ich mit Daten1 verknüpft habe.
 
Machst du dir das Leben eigentlich immer gern schwer? :confused:
Pack die Pfade in ein Array, dann kannst du es mit einer Schleife auch durchzählen.

Code:
#!/bin/bash

muh=(muh maeh moep)

echo Anzahl: ${#muh[*]}

for ((i = 0; i < ${#muh[*]}; i++))
do
	echo ${muh[$i]}
done

# Oder direkt:
echo --------
echo ${muh[0]}
echo ${muh[1]}
echo ${muh[2]}
 
@Firewire2002
*** mind. 5 min herzhaft gelacht***
muh=(muh maeh moep)

Und da es ging = hat diese Freude auch angehalten.

Und später brauchte ich auch " eval " vom Posting terx`

Danke an alle.


mein Script ist somit zu 99% fertig.
2 Fehler finde ich aber nicht, was recht ärgerlich ist, da die ERROR_log somit gefüllt wird und mit in der Email mit anhängt.

o.k.
Folgende Kreterien hatte ich an mein Script:
* Datenbank Dumps immer komplett (sind mir SEHR wichtig)
* JEDEN Sonntag n VollBackup
* Restliche Tage n incredi. Backup
* Alles per FTP hochladen
* Protokolle per Email
* Zum Schluss alles aufräumen (Backups löschen) ausser die Snapshots

So siehts aus:

Code:
-rw-r--r-- 1 ks014 ks014  10240  2. Mai 23:47 2008-05-02_Freitag_incremental_mail.tar.gz
-rw-r--r-- 1 ks014 ks014 389120  2. Mai 23:47 2008-05-02_Freitag_incremental_mysql.tar.gz
-rw-r--r-- 1 ks014 ks014  10240  2. Mai 23:47 2008-05-02_Freitag_incremental_srv.tar.gz
-rw-r--r-- 1 ks014 ks014 194560  3. Mai 00:45 2008-06-02_Samstag_VOLLBACKUP_mail.tar.gz
-rw-r--r-- 1 ks014 ks014 389120  3. Mai 00:45 2008-06-02_Samstag_VOLLBACKUP_mysql.tar.gz
-rw-r--r-- 1 ks014 ks014 440320  3. Mai 00:45 2008-06-02_Samstag_VOLLBACKUP_srv.tar.gz

In der Email liegen 4 Datein bei.
Backup.log = die Standard Log wo alle normalen Ausgaben drin sind
backup_err.log = hier werden bei Fehler die Errors geloggt => hier is auch das Probelm
backup_ftp.log = hier SOLLEN die FTP Übertragungsdaten eigendlich geloggt werden = is aber immer leer. 2tes Problem
backup-hdd.log = hier wird nur " df -h " ausgegeben.

Die Email selbst enthält noch ein paar Eckdaten:

Hinweis: Es wurden insgesamt 1 MB an Daten gesichert und per FTP übertragen

Belegung einiger Ordner:
93 MB ist der 'LOG' -Ordner groß
21 MB ist der 'MYSQL'-Ordner groß
1 MB ist der 'SRV' -Ordner groß


Dauer des Script-Durchlaufs:
START: Fr 2. Mai 23:48:59 CEST 2008
ENDE_: Fr 2. Mai 23:48:59 CEST 2008

Soviel zum kurzen Einblick in das Script. Jetzt nochmal die 2 Probleme im Klartext:

##########################################################################
### Problem 1
##########################################################################
backup_err.log
Code:
tar: /backup/MYSQL-DATENBANK/: Verzeichnis wurde umbenannt.
tar: Entferne führende »/« von Elementnamen
tar: Entferne führende »/« von Elementnamen
tar: Entferne führende »/« von Elementnamen

Wieso wurde die Datenbank umbenannt ? wurde normal erzeugt und besteht auch vorher nicht.

Hier ein paar kurze Ausschnitte:
Code:
AUSLAGERUNGSORDNER=/backup
Ordner1=$AUSLAGERUNGSORDNER/MYSQL-DATENBANK

mkdir -p $Ordner1

mysqldump -AaCceQ -u$MYUSER -p$MYPASS -r $Ordner1/mysql.dbs 1>>$LOGdatei 2>>$ERRdatei

In der LOG werden von tar 3 mal die / entfernt. finde diese aber nicht. Entferne ich die, die ich denke bzw. drin hab = geht meist nix mehr.

Code:
else
  for i in `seq 1 3`
    do
      eval tar -vcf ${Tagesdatum}_${Wochentag2}_${Teil}_\$Name$i.tar.gz -g $SNAPSHOT-\$Name$i \$Ordner$i 1>>$LOGdatei 2>>$ERRdatei
    done
fi

N bissel undurchsichtig. So würde es mit ausgefüllten Variablen aussehen. Die Error_logs lass ich mal wech

Code:
eval tar -vcf 2008-05-01_Donnerstag_incremental_srv.tar.gz -g /snapshot.log-srv /srv


##########################################################################
### Problem 2
##########################################################################

Ich würde gern die Ausgabe von der FTP Übertragung in die backup-ftp.log ausgeben lassen. Diese ist aber immer leer.
Wofür teht eigendlich > bin < ??
Ist das wichtig ?
Code:
ftp -ni <<EOFTP  > ${PFAD}-ftp.log

open $FTPIP
user $FTPUSER $FTPPASS
cd $FTPPFAD
bin
mput *.gz
quit
EOFTP


##########################################################################


Im Anhang mal das komplette Script im Zusammenhang.
 

Attachments

Code:
AUSLAGERUNGSORDNER=/backup
[...]
tar: Entferne führende »/« von Elementnamen

Damit ist das / vom /backup gemeint. Das ist aber normal.

Und das "bin" steht für Transfermodus im Binärformat. Das Betrifft aber nur Windows-System die zwischen normalen und Binärdateien unterscheiden. Bei Unix/Linux ist das wurscht, daher kann das "bin" auch weggelassen werden, sofern der FTP-Server nicht unter Windows läuft.
 
Schade... hab ich mir schon fast gedacht. Hab jetzt mal das / rausgenommen...
Und siehe da... ein Eintrag is schon mal weniger. Aber dadurch würde ich das Script zerstören, da dann alles in den Ordner drin liegt, wo man das Script grad ausgeführt wird. Und das is nicht so toll. Werd ich wohl damit leben müßen. Hatte eigendlich vor gehabt, die ERR.log nur anzuhängen, wenn diese nicht leer ist. Aber na gut... vielleicht fällt mir hier noch was ein.


Das größere Problem = das mit dem FTP und der Ausgabe. Gibt es hier eine Lösung ?
 
nein. Das hab ich anfänglich auch schon versucht. also mit 1>> *** 2>> ***

Dann bekomme ich immer den Ausgabewert auf der Shell.... nicht aber in der Datei.

Code:
Connected to 123.123.123.123.
220 (vsFTPd 2.0.5)
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
250 Directory successfully changed.
200 Switching to Binary mode.
local: 2008-05-03_Samstag_incremental_mail.tar.gz remote: 2008-05-03_Samstag_incremental_mail.tar.gz
229 Entering Extended Passive Mode (|||12015|)
150 Ok to send data.
100% |*******************************************************************************************************************| 21428     122.36 MB/s    00:00 ETA
226 File receive OK.
21428 bytes sent in 00:00 (5.86 MB/s)
local: 2008-05-03_Samstag_incremental_mysql.tar.gz remote: 2008-05-03_Samstag_incremental_mysql.tar.gz
229 Entering Extended Passive Mode (|||56566|)
150 Ok to send data.
100% |*******************************************************************************************************************|   100 KB   19.68 MB/s    00:00 ETA
226 File receive OK.
103126 bytes sent in 00:00 (9.60 MB/s)
local: 2008-05-03_Samstag_incremental_srv.tar.gz remote: 2008-05-03_Samstag_incremental_srv.tar.gz
229 Entering Extended Passive Mode (|||24269|)
150 Ok to send data.
100% |*******************************************************************************************************************|   444       5.10 MB/s    00:00 ETA
226 File receive OK.
444 bytes sent in 00:00 (349.10 KB/s)
221 Goodbye.
 
Back
Top