• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

If-Statement im Shell-Script ?

plaugraud

Newbie
Hallo,
habe erst einige wenige Basiserfahrungen mit Linux gemacht und wollte mir ein einfaches Bash-Script zum Sichern der mysql DB schreiben.
Funktionierte auch, bis ich eine IF-Abfrage einbaute:

if [ $2 == "%u" ]; then
DATUM=`date +$2` # %u = Nr.Wochentag
else
DATUM=`date +%Y-%m-%d_%H:%M:%S` # aktuelles Tagesdatum
fi

Jetzt kommt beim Ausführen plötzlich die Meldung:
line 45: syntax error: unexpected end of file

Wobei die Zeile 45 nicht die If-Abfrage, sondern die letzte Zeile ist.
Ich habe schon allesmögliche gegoogelt, aber nichts für mich verständliches gefunden, ausser diese Erklärung:
unexpected end of file at nnn = Bad quoting or complex command group
Aber dies sagt mir auch nichts.
Woran kann das liegen ? Andere .sh mit if funktionieren.
 
Ich sehe bei diesen Zeilen 2 Probleme:
1.) wenn $2 "leer" => Problem
2.) == sollte "=" heißen.

Schreib es mal so:

if [ "$2" = "%u" ]; then
DATUM=`date +$2` # %u = Nr.Wochentag
else
DATUM=`date +%Y-%m-%d_%H:%M:%S` # aktuelles Tagesdatum
fi

Der Fehler den du beschreibst passt nicht zu sen Zeilen, sondern eher zu
nicht ausgeglichenen " ' oder `

Haveaniceday
 
OP
P

plaugraud

Newbie
Besten Dank für die rasche Antwort !
Ich hab die If-Anweisung mit deinen Vorschlägen mit KWrite in eine neue Datei geschrieben und es hat funktioniert.
Irgendwie war die alte .sh Datei defekt (ich glaub, ich hab sie von Windows herüber kopiert und dann abgeändert).
 

oc2pus

Ultimate Guru
Tip:
wenn du Dateien von Windows nach unix kopierst, behandele sie mit dem Tool dos2unix. Damit werden die Zeilenenden korrigiert.
 

regexer

Advanced Hacker
haveaniceday schrieb:
1.) wenn $2 "leer" => Problem
2.) == sollte "=" heißen.
Das doppelte Gleichheits-Zeichen sollte auch gehen
Code:
~> if [ a == b ]; then echo treffer ; fi
~> if [ a == a ]; then echo treffer ; fi 
treffer
~> if [ 1 == 1 ]; then echo treffer ; fi    
treffer
~> if [ 1 == 2 ]; then echo treffer ; fi 
~>
 

TeXpert

Guru
notoxp schrieb:
haveaniceday schrieb:
1.) wenn $2 "leer" => Problem
2.) == sollte "=" heißen.
Das doppelte Gleichheits-Zeichen sollte auch gehen

jepp es ist auch richtig, hier ist die Frage, was man erreichen will,

1. Bash: '==' ist richtig
2. Strikte POSIX-Konformität, biei STRINGS '='

siehe man bash:
string1 == string2
True if the strings are equal. = may be used in place of == for strict POSIX compliance.
 
Oben