![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Erfahrener Benutzer
Registriert seit: 28.08.2004
Ort: konstanz am bodensee
Beiträge: 190
|
hallo alle zusammen, bin gerade dabei ein paar helper scripte für typo3 und linux zu schreiben.
bisher habe ich geschrieben ein script welches eine neue typo3 instanz einrichtet, also ein neue verzeichniss struktur anlegt und den quellcode über symbolische links verknüpft. das hat auch soweit alles geklappt. jetzt wollte ich ein backup script schreiben was alle dateien in ein archiev sichert und die datenbank dumpt... eigentlich ja kein großer act. die tar dateien sollen wie das gebackupte verzeichnis heißen mit einem datum davor. das datum lässt sich ja bequem über Code:
date "+%y%m%d_%H%M%S" wie krieg ich das nun in eine variable? Code:
date "+%y%m%d_%H%M%S" > test Code:
date "+%y%m%d_%H%M%S" > $datum ich könnte zwar den umweg über die datei gehen und das datum später wieder auslesen, aber das lässt sich doch bestimmt auch anders regeln? nur ich weiß nicht wie... mfg beny |
|
|
|
|
|
Nach oben #2 |
|
Sesselkleber
Registriert seit: 17.01.2005
Beiträge: 567
|
meinst du sowas?
Speichert das was du willst in der Variablen $dateis und gibt den Inhalt der Variablen dann aus. Allerdings muss die Bash unter /bin/bash installiert sein. Da das meine Standart-Shell ist nehm ich die eigentlich immer: Code:
#!/bin/bash dateis=/bin/bash date "+%y%m%d_%H%M%S" echo $dateis Hoffe das hilft. Sparrow |
|
|
|
|
|
Nach oben #5 |
|
Projektleiter
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
|
Nö. Hab ich aber auch nicht.
Hab mal ne halbe Stunde lang überlegen müssen, warum Code:
if[ -e ~/datei.txt ]; then
echo "Bla"
fi
Lösung war dann, nach dem "if" noch ein Leerzeichen zu machen. Furchtbare Scriptsprache. |
|
|
|
|
|
Nach oben #6 |
|
Erfahrener Benutzer
Registriert seit: 28.08.2004
Ort: konstanz am bodensee
Beiträge: 190
|
danke... hat gefuntz,
also die `` zeichen veranlassen den interpreter den inhalt als befehl und nicht als string zu sehen. warum steht bei euch am anfang des scriptes ein Code:
#!/bin/bash Code:
#!/bin/sh oder macht das keinen unterschied. bin da noch nicht ganz durchgestiegen. unter linux/unix scheint es ja mehrer shell interpreter zu geben sh,bash,csh,tsh die alle eine geringfügig unterschiedlich syntax haben... |
|
|
|
|
|
Nach oben #7 |
|
Projektleiter
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
|
Ganz ehrlich? Ich hab keine Ahnung.
Hab's bei Sparrow kopiert. Jetzt wo du es sagst fällt mir aber auf, dass ich das bei meinen anderen Scripten auch so mache... Da bin ich mal gespannt, was der Sparrow zu seiner Verteidigung zu sagen hat. |
|
|
|
|
|
Nach oben #8 |
|
Erfahrener Benutzer
Registriert seit: 28.08.2004
Ort: konstanz am bodensee
Beiträge: 190
|
so dank eurer hilfe sind die scripte nun fertig...
ein kleines problem besteht allerdings noch. wenn man ein backup wiederherstellt kann man einen neuen instanznamen angeben, der instanzname wird für die benahmung des typo3 ordners und der datenbank benutzt. d.H. Code:
sh backup_typo3_instance.sh instance1 das archiv wird als /usr/local/typo3/backup/(DATUM)_instance1_backup.tar.gz abgelegt. beim wiederherstellen übergibt man den namen des backup archivs und den neuen instanznamen. also Code:
sh restore_typo3_instance.sh 060216_123054_instance1_backup.tar.gz instance1_restored nun wird eine neue datenbank mit dem namen instance1_restored angelegt und in diese der dump eingespielt. jetzt bleibt nur noch die typo3 configurationsdatei, in welcher der datenbank name eingetragen ist. wenn ein backup mit dem selben instanzname wiederhergestellt wird ist das ja kein problem, da die db gleich heißt, will man es aber unter einem anderen instanznamen wiederherstellen müsste die datei umgeschrieben werden folgender code Code:
$typo_db = 'instance1'; Code:
$typo_db = 'instance1_restored'; kann ich das auch über die shell regeln? es gibt ja den befehl grep mit dem man nach mustern in einer datei suchen kann. weiß nur mal wieder nicht wie ich das realisieren soll... als ausweg könnte man ein keines php script schreiben das über php cli aufgerufen wird, aber hab das jetzt alles so schön nur über die shell hingekriegt daß ich ungern im letzen schritt noch php einbringen würde.... hier mal noch der code für das backup und wiederherstellungsscrit, vieleicht findet ja jemand noch fehler oder dinge die man eleganter regeln könnte backup_typo3_instance.sh Code:
#!/bin/sh clear echo "Erstellen eines kompletten Typo3 Backups" echo ------------------------------------------------------------ if [ "$1" == "" ] then echo "FEHLER: Kein Instanzname angegeben" echo echo "Benutzung des Scripts:" echo echo "sh backup_typo3_instance.sh instancename" echo echo "z.B. sh backup_typo3_instance.sh typo3_instance1" echo echo ------------------------------------------------------------ exit fi bdate=`date "+%y%m%d_%H%M%S"` bname=$bdate"_"$1"_backup.tar" dbdump="typo3_db_backup_dump.sql" cd /var/www/typo3/$1 echo "Erstelle Datenbank Dump..." mysqldump $1 > $dbdump echo "Erstelle tar Archiv..." tar -cf /usr/local/typo3/backup/$bname * echo "Erstelle gz Archiv..." gzip -9 /usr/local/typo3/backup/$bname echo "Loesche temporaere Dateien..." rm $dbdump echo echo "Datei Backup erfolgreich in /usr/local/typo3/backup/"$bname".gz erstellt!" echo ------------------------------------------------------------ echo restore_typo3_instance.sh Code:
clear echo echo ----------------------------------------------------------- echo "Typo3 Instanz wiederherstellen" echo ----------------------------------------------------------- if [ "$1" == "" ] then echo "FEHLER: keine Backup Datei angegeben!" echo echo "Benutzung des Scripts:" echo echo "sh restore_typo3_instance backupdatei instancename" echo echo "z.B. sh restore_typo3_instance typo3_instance1" echo ----------------------------------------------------------- echo exit fi if [ "$2" == "" ] then echo "FEHLER: kein Instanz Name angegeben!" echo echo "Benutzung des Scripts:" echo echo "sh restore_typo3_instance backupdatei instancename" echo echo "z.B. sh restore_typo3_instance typo3_instance1" echo ----------------------------------------------------------- echo exit fi echo "Backupdatei: $1" echo "Instanzname: $2" echo ----------------------------------------------------------- echo "Erstelle Instanzverzeichnis..." mkdir /var/www/typo3/$2 echo echo "Kopiere Backupdatei..." cp /usr/local/typo3/backup/$1 /var/www/typo3/$2 echo cd /var/www/typo3/$2 echo "Entpacke gz Archiv..." gzip -d $1 echo echo "Entpacke tar Archiv..." tar -xf * echo "Loesche tar Archiv..." rm *_backup.tar echo "Datenbank $2 erstellen..." echo "CREATE DATABASE $2;" > typo3_db_backup_temp.sql mysql < /var/www/typo3/$2/typo3_db_backup_temp.sql echo echo "Datenbank befuellen..." mysql --database=$2 < typo3_db_backup_dump.sql echo echo "Loeschen der temporaeren Dateien..." rm typo3_db_backup* echo echo ----------------------------------------------------------- echo "Typo3 Backup erfolgreich wiederhergestellt!" echo |
|
|
|
|
|
Nach oben #11 | |
|
Sesselkleber
Registriert seit: 17.01.2005
Beiträge: 567
|
Zitat:
Die erste Zeile gibt an mit welcher Shell das Scipt interpretiert werden soll. Angenommen du arbeitest normalerweise in einer SH-Shell und das script ist eigentlich für eine Bash geschrieben. Und jetzt nehmen wir mal an, dass der Script-Syntax für beide Shells unterschiedlich ist (was ich aber nicht weiß), dann sorgast du mit der Zeile dafür, dass dein System weiß welche Shell zum ausführen benutzt werden soll. Voraussetzung ist natürlich, dass die Shell wirklich unter /bin/bash (bzw. /bin/sh) installiert ist. Sind sie normalerweise aber immer. Gruß Sparrow |
|
|
|
|
|
|
Nach oben #12 |
|
Erfahrener Benutzer
Registriert seit: 27.02.2006
Beiträge: 146
|
Um es kurz zu machen, es gibt eine orginal sh, die einen aus bash sicht wesentlich geringeren Funktionsumfang besitzt. Sie ist allerdings kaum noch gebräuchlich. Deshalb - und weil die bash frei und abwärts kompatibel ist, wird diese häufig (aber nicht immer) als ersatz über einen symbolischen Link als sh angeboten.
Gruß, Jumper, the II. |
|
|
|
|
|
Nach oben #13 |
|
Erfahrener Benutzer
Registriert seit: 28.08.2004
Ort: konstanz am bodensee
Beiträge: 190
|
aha interessant,
das heißt am besten man verwendet einfach bash anstelle von sh... leider hat immer noch niemand auf die eigentliche (2te) frage geantwortet, so daß ich sie einfach nochmal stelle... ist es möglich mit einem sh/bash script ein bestimmtes muster (regulärer ausdruck) in einer datei zu ersetzen. also ein bash/sh pendant zu der php funktion ereg_replace. |
|
|
|
|
|
Nach oben #15 |
|
Mensch
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.710
|
schau dir mal sed an. damit kannst du suchen und ersetzen mittels regulären ausdrücken.
gutes englischsprachiges shelltut (teilweise aber etwas überladen) http://www.freeos.com/guides/lsst/index.html
__________________
I did it my way - Senseless-Blog |
|
|
|
|
|
Nach oben #16 |
|
Erfahrener Benutzer
Registriert seit: 27.02.2006
Beiträge: 146
|
Tja, dafür eignet sich weder sh noch bash.
Manual Bash: http://www.gnu.org/software/bash/manual/bashref.html Auch ich empfehle eher sed: http://www.gnu.org/software/sed/manu..._mono/sed.html Gruß, Jumper, the II. |
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|