Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

If-Statement im Shell-Script ?

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
plaugraud
Newbie
Newbie
Beiträge: 6
Registriert: 23. Sep 2005, 10:39

If-Statement im Shell-Script ?

Beitrag von plaugraud »

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.
Grüße,
Rudolf.
Benutzeravatar
haveaniceday
Hacker
Hacker
Beiträge: 775
Registriert: 7. Jul 2004, 14:09
Wohnort: Paderborn

Beitrag von haveaniceday »

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
plaugraud
Newbie
Newbie
Beiträge: 6
Registriert: 23. Sep 2005, 10:39

Beitrag von plaugraud »

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).
Grüße,
Rudolf.
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus »

Tip:
wenn du Dateien von Windows nach unix kopierst, behandele sie mit dem Tool dos2unix. Damit werden die Zeilenenden korrigiert.
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

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

Code: Alles auswählen

~> 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 
~>
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

notoxp hat geschrieben:
haveaniceday hat geschrieben: 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.

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
Antworten