Erstes Shell-Skript wirft etliche Fehler

Mean

New Member
Hallo,

ich habe mir (m)ein (erstes) Shell Skript gebaut mit dessen Hilfe ich meine Dev-Typo3-Installation einmal pro Woche automatisch per Cronjob durch die Prod überspielen möchte.

Wenn ich dieses nun aber ausführe hagelt es (noch in meiner Dev-VMWare) Fehler ohne Ende

"FOR command not found"
"DONE command not found"
...

Leider kann ich nicht alle rauskopieren, weil die Meldung zu lange für mein VMWare-Fenster ist O:-) aber vielleicht seht ihr auch, wo genau der Fehler liegt.

Ich verwende als OS Debian (Lenny). Hier das Skript:

Code:
#!/bin/sh
# Zugangsdaten und Name der DB von 
# der der Dump erstellt wird
mysqlDumpUser="username"
mysqlDumpPw="pw"
mysqlDumpHost="localhost"
mysqlDumpDB="TYPO3_PROD_DB"
# Zugangsdaten und Name der DB die 
# in die der Dump eingespielt wird
mysqlUser="username"
mysqlPw="pw"
mysqlHost="localhost"
mysqlDB="TYPO3_DEV_DB"
# Temporäre Dump-Datei
tmpDumpDir="/tmp"
tmpDumpFile="typo3dump.sql"
# Typo3-Ordner-Struktur der zu kopierenden Ordner
typo3ProdPath="/var/www/prod"
typo3DevPath="/var/www/dev"
typo3Folders=(uploads fileadmin typo3conf)
# Dump erstellen
mysqldump -u $mysqDumplUser -h $mysqlDumpHost -p$mysqlDumpPw $mysqlDumpDB > $tmpDumpDir/$tmpDumpFile
IF [ -f $tmpDumpDir/$tmpDumpFile ] THEN
	# Dev-Datenbank komplett löschen
	mysql -u $mysqlUser -h $mysqlHost -p$mysqlPw "DROP DATABASE IF EXISTS " . $mysqlDB
	# Dev-Datenbank neu anlegen
	mysql -u $mysqlUser -h $mysqlHost -p$mysqlPw "CREATE DATABASE IF NOT EXISTS " . $mysqlDB
	# Dump einspielen
	mysql -u $mysqlUser -h $mysqlHost -p$mysqlPw $mysqlDB < $tmpDumpDir/$tmpDumpFile
	# Über zu kopierende Ordner iterieren
	FOR folder IN $typo3Folders DO
		IF [ -d $typo3ProdPath/$folder && -d $typo3DevPath/$folder ] THEN
			# Den Ordner in der Dev-Umgebung löschen
			rm -rf $typo3DevPath/$folder
			# Den Ordner aus der Prod-Umgebung kopieren
			cp $typo3ProdPath/$folder $typo3DevPath/.
		ELSE
			echo $folder . ' existiert nicht (zum Kopieren oder Löschen)'
		FI
	DONE
FI

Ich habe das Skript in Windows geschrieben und dachte erst, dass es an den Zeilenumbrüchen,... liegt und habe diese dann aber entfernt.

Dem Skript gebe ich CHMOD 777 und führe es dann über sh my_skript.sh aus.

Vielen Dank und viele Grüße,

Dirk
 
Vielen Dank euch 3en! Das hat schon mal geholfen. Jetzt hagelt es nur noch einen Fehler, und zwar an dieser Stelle:

Code:
	for folder in $typo3Folders do

Syntax error near unexpected token "rm" (das steht in der Folgezeile, wenn ich die if-Anweisung auskommentiere). Da, egal was ich auskommentiere, immer die Zeile nach der for-Anweisung angemeckert wird gehe ich davon aus, dass es an der for-Zeile liegt...

Ist ggf. das Array falsch aufgebaut? Ich habe auch schon Schreibweisen probiert die ich unter Google gefunden habe. Statt $typo3Folders

Code:
... in "${typo3Folders}" ...

Code:
... in `echo $typo3Folders` ...

Noch eine Frage: Wie verknüpfe ich denn zwei if-Anweisungen miteinander? In all den Beispielen/Anleitungen habe ich immer nur eine Bedingung für if-Anweisungen gefunden und, dass es eben den "&&"-Operator gibt, aber nicht, ob ich [..] && [..] oder [.. && ..] schreibe:

[CODE]
		if [ -d $typo3ProdPath/$folder && -d $typo3DevPath/$folder ] then

Vielen Dank und viele Grüße,

Dirk
 
Einmal so:
Code:
for folder in $typo3Folders; do

Und einmal so:
Code:
if [ -d $typo3ProdPath/$folder ]  && [ -d $typo3DevPath/$folder ]; then
 
Danke für deine Antwort! Leider ist es das auch nicht. Durch das Setzen des ";" bekomme ich nun immer eine

unexpected token `do`

Meldung.

Ich habe mir die .sh jetzt auch mal im vi angeschaut, ob sich böse (Windows-)Zeichen in die Datei geschlichen haben, aber am Zeilenende steht immer nur ein

^M

Daran dürfte es also auch nicht liegen?! :(
 
Oh man, sorry und vielen Dank für die Antwort!

Jetzt funktioniert alles so weit...

Vielen Dank nochmal an alle und viele Grüße,

Dirk
 
Back
Top