[Linux Shell-Script] wie variable mit parametern definieren!

MyKron

Commodore Special
Mitglied seit
15.01.2002
Beiträge
499
Renomée
1
Standort
Berlin
  • QMC Race
  • SIMAP Race
Hi Leute!

Ich bin gerade dabei mein erstes shell script zu schreiben unt scheitere an folgender sache:

Ich moechte mir eine variable definieren namens datum die folgendes enthaelt 20050324.
auf der konsole klappt das mit DATUM='date +%Y%m%d'. anschliessender aufruf von $DATUM leifert gewuenschtes ergebnis. auch ein direkter aufruf aus dem shell script klappt, wenn ich jedoch die variable auf folgede art verwenden moechte:
zip -r -D -9 ~/backup/$DATUM/$FILENAME jobs/*
wird mir der fehler angezeigt, dass 'date +%Y%m%d' kein gueltiges verzeichnis sei.
ich moment nehme ich die sh shell, aber auch versuche mit csh, tcsh und bash haben nichts gebracht. Hab ihr eine Empfehlung fuer eine shell und wie kann ich das problem loesen??

Dank schonmal!
 
Warscheinlich musst du das Verzeichniss mit dem Datum erstmal erstellen?

Bleib bei /bin/sh.

Ich hab selber mal ein Backupscript angefangen, aber es nie beendet, einige Sachen sind auch nicht so optimal, ist aber 'ne gute Basis.

Bitte Lizenz beachten

http://tom.ruegen-grafik.de/files/backup.sh

EDIT: Das backup.sh Ding funktioniert jetzt. Gelegenheit macht Bugfixing ;)
 
Zuletzt bearbeitet:
Zum Skript sag ich mal nix .. dafür müsste ich noch einiges nachholen. Aber die Lizens hat was ;D

Edit: Ok, nun weiss ich wieder, wieso die mir bekannt vorkam, kann ja nur aus dem xBSD-Lager kommen :] ;)
 
Zuletzt bearbeitet:
auf der konsole klappt das mit DATUM='date +%Y%m%d'
falls du das so mit apostroph gemacht hast, ist das falsch. richtiger waeren backticks `, noch besser ist $().

zip -r -D -9 ~/backup/$DATUM/$FILENAME jobs/*
das verzeichnis muss erst angelegt werden. ausserdem ist zip in der linux/unix-welt keine gute wahl. tar in verbindung mit gzip bzw. bzip2 ist der standard.

ich moment nehme ich die sh shell, aber auch versuche mit csh, tcsh und bash haben nichts gebracht. Hab ihr eine Empfehlung fuer eine shell und wie kann ich das problem loesen??
schreib alles so, dass es mit sh funktioniert. selten braucht man wirklich ein feature, welches in sh nicht existiert. csh ist voellig unbrauchbar, bash ist die linux-standard-seuche, sh wie gesagt ist der kleinste gemeinsame nenner, auf den du auf fast jedem system zaehlen kannst.
 
schreib alles so, dass es mit sh funktioniert. selten braucht man wirklich ein feature, welches in sh nicht existiert. csh ist voellig unbrauchbar, bash ist die linux-standard-seuche, sh wie gesagt ist der kleinste gemeinsame nenner, auf den du auf fast jedem system zaehlen kannst.
Das moechte ich hier auch nocheinmal betonen.

csh:
http://www.cs.uu.nl/wais/html/na-dir/unix-faq/shell/csh-whynot.html

bash:
Das schlimmste daran ist, dass der sh-Modules der bash nicht 100% sh abildet, sondern auch erweitert. Das machen sich einige zu Nutze und schreiben #!/bin/sh Scripte, die aber bash Erweiterungen benutzen.

Grauenvoll.
richtiger waeren backticks `, noch besser ist $().
Mit $() wird der Code wirklich besser lesbar, ich hab die backquotes viel zu lange benutzt.
 
Zuletzt bearbeitet:
Wunderbar $() klappt hervorragend, auch wenn es mir schon fast peinlich ist, dass ich nicht daran gedacht habe das verzeichnis vorher zu erstellen, ich bin jetzt aber von dem extraordner abgekommen, und lege nur die gepackten Dateien ab.

zip habe ich nur benutzt weil ich die syntax noch kannte, sicherlich werde ich auf tar.gz umsteigen, aber das ist nur schönheitskosmetik. das backupscript soll auch wirklich nicht sonderlich viel machen, nur einen ordner packen, auf den nur ich zugriff habe. dient lediglich zum zurückverfolgen von arbeitschritten

vielen dank euch allen, ihr habt sehr geholfen!

p.s. die backup.sh schau ich mir bei gelegenheit mal näher an!
 
Andere Frage dazu:

Was ist der Unterschied zwischen $() und ${} ?

PS: Tolle Lizenzbestimmungen ;D

Gruß Wuschl

EDIT: ddate kam mir nicht bekannt vor also hab ich mir mal die Manpage angeschaut: http://www.rt.com/man/ddate.1.html

Hat sich denn noch keiner gefunden der ein Programm schreibt, welches auf Deutsch sagt: "Heute ist der x-te Tag bevor der Osterhase kommt"? Denn auf Englisch gibts das ja schon

*lol* *lol* *lol* Oder habe ich den Sinn von ddate missverstanden?
 
Zuletzt bearbeitet:
Original geschrieben von Wuschl
Andere Frage dazu:
Was ist der Unterschied zwischen $() und ${} ?
$() substituiert den Rueckgabewert eines Befehls.
${} substituiert den Wert einer Variable.

Diskordianismus:
Eine Religion getarnt als Witz, getarnt als Religion. :)
 
Original geschrieben von Tom24
$() substituiert den Rueckgabewert eines Befehls.
${} substituiert den Wert einer Variable.

Diskordianismus:
Eine Religion getarnt als Witz, getarnt als Religion. :)

Also wäre demnach ${VARIABLE} das Selbe wie $VARIABLE ?

Diskordianismus: Hätte mir nicht gedacht, dass sich jemand die Mühe macht, solch einen Schwachsinn in ein Programm zu packen :] ;D

Gruß Wuschl
 
vor allem hilft es, wenn man strings konstruiert, die zum teil aus variablen bestehen:
Code:
FOO=bar
echo "$FOOgeld"
ist zb mehrdeutig. dafuer gibts dann
Code:
echo "${FOO}geld"
 
Original geschrieben von TCM
vor allem hilft es, wenn man strings konstruiert, die zum teil aus variablen bestehen:
Code:
FOO=bar
echo "$FOOgeld"
ist zb mehrdeutig. dafuer gibts dann
Code:
echo "${FOO}geld"
Genau auf dieses Szenario wollte ich hinaus. :)
 
Jo, und ohne diese tollen Klammerspielchen würde das dann so aussehen - alle meine Scripte sehen (noch) so aus:

echo "Wuschl wurde am "`date +%x%y%z` "herumgewuschlt "

Wieder was gelernt. Meine Herren, ihr seid ja doch die größten! *massa* *massa* *massa*

Gruß Wuschl
 
Zurück
Oben Unten