Variable definieren in Variable
Variable definieren in Variable
Hallo Leute,
ist es möglich folgendes zu definieren:
Quasi eine Variable in einer Variable...?
VHOSTFOLDER=/var/www/vhosts/
SQLDIR=$VHOSTFOLDERsqldump/
ich denke hier muss noch ein Anführungszeichen hin oder?
Über einen Tipp freue ich mich
vielen Dank
ist es möglich folgendes zu definieren:
Quasi eine Variable in einer Variable...?
VHOSTFOLDER=/var/www/vhosts/
SQLDIR=$VHOSTFOLDERsqldump/
ich denke hier muss noch ein Anführungszeichen hin oder?
Über einen Tipp freue ich mich
vielen Dank
- peschmae
- Beiträge: 4844
- Registriert: 07.01.2003 12:50:33
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: nirgendwo im irgendwo
Re: Variable definieren in Variable
Kommt drauf an was du genau willst.
Je nach dem:
Beim ersten wird die Variable ersetzt, beim zweiten auch - aber das zweite funktioniert auch wenn VHOSTFOLDER Leerzeichen enthält, beim dritten wird die Variable nicht ersetzt wiel durch die einfachen ' geschützt (kann nützlich sein wenn man das z.B. erst später oder anderswo ersetzen lassen will).
Das ${} Konstrukt brauchts weil der Shell sonst unklar ist, wann der Variablenname zuende ist. (Normalerweise beim nächsten space oder /, aber nicht mitten im Wort)
MfG Peschmä
Je nach dem:
Code: Alles auswählen
$ VHOSTFOLDER=/var/www/vhosts/
$ SQLDIR=${VHOSTFOLDER}sqldump/; echo $SQLDIR
/var/www/vhosts/sqldump/
$ SQLDIR="${VHOSTFOLDER}sqldump/"; echo $SQLDIR
/var/www/vhosts/sqldump/
$ SQLDIR='${VHOSTFOLDER}sqldump/'; echo $SQLDIR
${VHOSTFOLDER}sqldump/
Das ${} Konstrukt brauchts weil der Shell sonst unklar ist, wann der Variablenname zuende ist. (Normalerweise beim nächsten space oder /, aber nicht mitten im Wort)
MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy
Re: Variable definieren in Variable
super genial, habe alles verstanden.
Habe mich erst kürzlich mit Shellprogrammierung auseinandergesetzt und bin eben noch bei den absoluten "Basics"
...
vielen DANK!
Habe mich erst kürzlich mit Shellprogrammierung auseinandergesetzt und bin eben noch bei den absoluten "Basics"
...
vielen DANK!
Re: Variable definieren in Variable
Hallo,
ich bins nochmal. Habe mein Script nach deinen Tipps verfeinert.
allerdings gibt es beim "Zielverzeichnis" irgendwie Problem.
Ich erhalte immer die Meldung:
./script.sh: line 45: {/var/www/vhosts/sqldump/}: No such file or directory
#!/bin/bash
# zu sichernder vhost...
VHOSTFOLDER=/var/www/vhosts/
# SQLdir sollte im vhost liegen
SQLDIR=${VHOSTFOLDER}sqldump/
LOG=/root/script.log
mysqldump -u ${USER1} -p${PW1} $DB1 > "{$SQLDIR}""${Ziel1}" >> $log
mysqldump -u ${USER2} -p${PW2} $DB2 > "{$SQLDIR}""${Ziel2}" >> $log
# Übertragen der DATEN inkl. DATENBANKEN
rsync -rahHpz --progress --compress-level=8 --stats ${VHOSTFOLDER} root@${REMOTE} >> $log
und das Logfile wurde auch nicht erzeugt.. ?
Hoffe nochmals auf ein paar Tipps, vielen Dank
ich bins nochmal. Habe mein Script nach deinen Tipps verfeinert.
allerdings gibt es beim "Zielverzeichnis" irgendwie Problem.
Ich erhalte immer die Meldung:
./script.sh: line 45: {/var/www/vhosts/sqldump/}: No such file or directory
#!/bin/bash
# zu sichernder vhost...
VHOSTFOLDER=/var/www/vhosts/
# SQLdir sollte im vhost liegen
SQLDIR=${VHOSTFOLDER}sqldump/
LOG=/root/script.log
mysqldump -u ${USER1} -p${PW1} $DB1 > "{$SQLDIR}""${Ziel1}" >> $log
mysqldump -u ${USER2} -p${PW2} $DB2 > "{$SQLDIR}""${Ziel2}" >> $log
# Übertragen der DATEN inkl. DATENBANKEN
rsync -rahHpz --progress --compress-level=8 --stats ${VHOSTFOLDER} root@${REMOTE} >> $log
und das Logfile wurde auch nicht erzeugt.. ?
Hoffe nochmals auf ein paar Tipps, vielen Dank
- habakug
- Moderator
- Beiträge: 4314
- Registriert: 23.10.2004 13:08:41
- Lizenz eigener Beiträge: MIT Lizenz
Re: Variable definieren in Variable
Hallo!
Hier musst du die Klammern weglassen und aus
das
machen. Dann loggt das auch.
Gruß, habakug
Hier musst du die Klammern weglassen und aus
Code: Alles auswählen
mysqldump -u ${USER1} -p${PW1} $DB1 > "{$SQLDIR}""${Ziel1}" >> $log
Code: Alles auswählen
mysqldump -u ${USER1} -p${PW1} $DB1 > "$SQLDIR""${Ziel1}" >> $LOG
Gruß, habakug
Re: Variable definieren in Variable
Generell zu der Programmierung. Wäre es evtl. nicht besser $VHOSTFOLDER ohne Slash am Ende zu definieren und den Rest umzuprogrammieren? Dann könnte man an einigen Stellen evtl. {} weglassen.
Re: Variable definieren in Variable
Hallo ja generell wäre das sicher sinnvoll..
hatte mal gelesen, dass es eindeutiger wäre wenn man den Slash macht, das es sich um einen kompletten Pfad handelt.. aber ich kanns noch umbauen.-..
jetzt ein erneutes kleines Problem:
Nachm Doppelpunkt wird mir der ZIELPFAD einfach nicht angezeigt der ist immer "leer"
lasse mir den Zielpfad ausgeben mit
REMOTE=server.1.de:${ZIELPFAD}
echo $REMOTE
server.1.de:
gibt es irgendwie eine Ausnahme nach Doppelpunkt ?
Auch: REMOTE=server.1.de:$ZIELPFAD
für zu
echo $REMOTE
server.1.de:
freue mich über antworten..
hatte mal gelesen, dass es eindeutiger wäre wenn man den Slash macht, das es sich um einen kompletten Pfad handelt.. aber ich kanns noch umbauen.-..
jetzt ein erneutes kleines Problem:
Nachm Doppelpunkt wird mir der ZIELPFAD einfach nicht angezeigt der ist immer "leer"
lasse mir den Zielpfad ausgeben mit
REMOTE=server.1.de:${ZIELPFAD}
echo $REMOTE
server.1.de:
gibt es irgendwie eine Ausnahme nach Doppelpunkt ?
Auch: REMOTE=server.1.de:$ZIELPFAD
für zu
echo $REMOTE
server.1.de:
freue mich über antworten..
Re: Variable definieren in Variable
Doppelpunkt hat keine Besonderheiten. Aber ${ZIELPFAD} bzw. $ZIELPFAD wird leer sein.
Lass doch vorher einfach per
den Wert ausgeben. Wahrscheinlich ist aber eher der Name ZIELPFAD falsch als der Inhalt. Wie ist der korrekt Code?
PS.: Poste bitte zukünftig korrekte Beispiele aus deinem vollständigen Script. Hierbei lösche alles unwichtige, was nicht unmittelbar zum Thema gehört. Dann kann man das Script auch leicht ausprobieren.
Lass doch vorher einfach per
Code: Alles auswählen
echo ${ZIELPFAD}
PS.: Poste bitte zukünftig korrekte Beispiele aus deinem vollständigen Script. Hierbei lösche alles unwichtige, was nicht unmittelbar zum Thema gehört. Dann kann man das Script auch leicht ausprobieren.
Re: Variable definieren in Variable
Man erspart sich viel Ärger, wenn man konsequent alle Strings in Anführungszeichen einschließt und immer geschweifte Klammern benutzt.
Das ist zwar oft überflüssig, aber so gut wie nie falsch.
Code: Alles auswählen
SERVER="server.1.de"
ZIELPFAD=":test/"
REMOTE="${SERVER}${ZIELPFAD}"
Re: Variable definieren in Variable
Dem schliesse ich mich an, wenn man auch manchmal nicht quoten darf, wie z.B. bei:Phineas hat geschrieben:Man erspart sich viel Ärger, wenn man konsequent alle Strings in Anführungszeichen einschließt
Code: Alles auswählen
list="a b c"
for i in $list ; do ... done
Da bin ich anderer Meinung. Ich glaube, dass man durch zu viel unnoetige Zeichen die Ausdrucksfaehigkeit von Code reduziert. Wenn man das Rauschen (= unnoetige Information) erhoeht wird es zunehmend schwieriger das Signal (= relevante Information) zu erfassen. Daher: So wenig wie moeglich; so viel wie noetig.und immer geschweifte Klammern benutzt.Das ist zwar oft überflüssig, aber so gut wie nie falsch.Code: Alles auswählen
SERVER="server.1.de" ZIELPFAD=":test/" REMOTE="${SERVER}${ZIELPFAD}"
Viel wichtiger finde ich allerdings den Rat Variablen mit Kleinbuchstaben zu benennen. Grossbuchstabige Variablennamen lesen sich deutlich schwerer und stellen in der Shell den Namenraum der vordefinierten Variablen dar. Der Nutzer/Programmierer sollte kleinbuchstabige Variablennamen verwenden um Kollisionen zu vermeiden.
Use ed once in a while!
Re: Variable definieren in Variable
Ich bleibe bei meiner Meinung.Meillo hat geschrieben:Ich glaube, dass man durch zu viel unnoetige Zeichen die Ausdrucksfaehigkeit von Code reduziert.
Das:
Code: Alles auswählen
REMOTE="${SERVER}String${ZIELPFAD}"
Code: Alles auswählen
REMOTE="${SERVER}String$ZIELPFAD"
Aber gut: Das bleibt wohl Geschmacksache. Wichtig ist, dass man sich konsequent an seine Standards hält (falls man kein Profi ist, der seine Codes mit mit anderen Programmierern zusammen entwickelt, dann hält man sich eh an gegebene Standards).