Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Antwort
 
Themen-Optionen
Alt 15.02.2006, 16:00   Nach oben    #1
beny_mcde
Erfahrener Benutzer
 
Registriert seit: 28.08.2004
Ort: konstanz am bodensee
Beiträge: 190
Standard [sh script] ausgabe in variable umleiten

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"
erzeugen, nur wird es ja dann einfach auf der console ausgegeben.
wie krieg ich das nun in eine variable?
Code:
date "+%y%m%d_%H%M%S" > test
würde das datum in eine datei schreiben aber
Code:
date "+%y%m%d_%H%M%S" > $datum
funtzt net...

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
beny_mcde ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.02.2006, 19:00   Nach oben    #2
sparrow
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
Standard

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
Er führt in Zeile 3 eine weitere bash aus um den Befehl date auszuführen und schreibt das Resultat in die Variable.

Hoffe das hilft.

Sparrow
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.02.2006, 21:21   Nach oben    #3
pago
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.083
Standard

Geht auch so:

Code:
#!/bin/bash

dateis=`date "+%y%m%d_%H%M%S"`
echo $dateis
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.02.2006, 21:24   Nach oben    #4
sparrow
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
Standard

Zitat:
Zitat von pago
Geht auch so:

Code:
#!/bin/bash

dateis=`date "+%y%m%d_%H%M%S"`
echo $dateis
Hey stimmt.
Hab ich schon erwähnt, dass ich keine Ahnung von Scripten in der Linux-Konsole habe
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.02.2006, 22:14   Nach oben    #5
pago
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.083
Standard

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
Nicht funktioniert...
Lösung war dann, nach dem "if" noch ein Leerzeichen zu machen. Furchtbare Scriptsprache.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.02.2006, 10:22   Nach oben    #6
beny_mcde
Erfahrener Benutzer
 
Registriert seit: 28.08.2004
Ort: konstanz am bodensee
Beiträge: 190
Standard

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
müsste es nicht eigentlich
Code:
#!/bin/sh
heißen, das script soll ja von sh ausgeführt werden.
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...
beny_mcde ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.02.2006, 11:06   Nach oben    #7
pago
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.083
Standard

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.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.02.2006, 13:01   Nach oben    #8
beny_mcde
Erfahrener Benutzer
 
Registriert seit: 28.08.2004
Ort: konstanz am bodensee
Beiträge: 190
Standard

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
erzeugt ein archiv welches alles dateien aus dem ordner /var/www/typo3/instance1 beinhaltet plus einen db dump der datenbank 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
es wird nun das verzeichniss /var/www/typo3/instanc1_restored angelegt, in welches alle dateien aus dem archiv entpackt werden.

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';
müsste also in
Code:
$typo_db = 'instance1_restored';
umgeschrieben werden...
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
beny_mcde ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.02.2006, 13:55   Nach oben    #9
Lars
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Bash und SH sind soweit ich weiß zwei verschiedene Shells. Gibt da ja einiges.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.02.2006, 22:18   Nach oben    #10
Sclot
Projektleiter
 
Benutzerbild von Sclot
 
Registriert seit: 18.08.2005
Ort: Bremen
Beiträge: 145
Standard

/bin/sh sollte ein symlink auf /bin/bash sein

einfach mal die ausgabe von: ls -la /bin/sh anschauen.
Sclot ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.02.2006, 11:04   Nach oben    #11
sparrow
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
Standard

Zitat:
Zitat von beny_mcde
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
müsste es nicht eigentlich
Code:
#!/bin/sh
heißen, das script soll ja von sh ausgeführt werden.
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...

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
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.02.2006, 21:13   Nach oben    #12
JumperII
Erfahrener Benutzer
 
Benutzerbild von JumperII
 
Registriert seit: 27.02.2006
Beiträge: 136
Standard

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.
JumperII ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.03.2006, 15:38   Nach oben    #13
beny_mcde
Erfahrener Benutzer
 
Registriert seit: 28.08.2004
Ort: konstanz am bodensee
Beiträge: 190
Standard

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.
beny_mcde ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.03.2006, 16:04   Nach oben    #14
Lars
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Weiß nicht genau, wie man in Dateien ersetzt, grep sorgt aber für die RegExp-Unterstützung.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.03.2006, 16:09   Nach oben    #15
WarrenFaith
Mensch
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.710
Standard

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
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.03.2006, 16:50   Nach oben    #16
JumperII
Erfahrener Benutzer
 
Benutzerbild von JumperII
 
Registriert seit: 27.02.2006
Beiträge: 136
Standard

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.
JumperII ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:32 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

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 43 44