Shellscript if Anweisung

Green_Ranger

Fleet Captain Special
Mitglied seit
12.01.2004
Beiträge
344
Renomée
7
Hi, ich bekomme in der Konsole immer folgende Meldung...

bei 2 Argumenten:
Code:
-bash-4.1$ sh test.sh 2 3
Anzahl der Argumente: 2
test.sh: line 6: syntax error: unexpected end of file

bei 3 Argumenten:
Code:
-bash-4.1$ sh test.sh 2 3 5
Anzahl der Argumente: 3
test.sh: line 6: syntax error: unexpected end of file
Hier der Inhalt von test.sh
Code:
echo "Anzahl der Argumente: $#"
if [$# != 3]
then
echo "Falsche Anzahl an Parametern"
fi

Das ganze bringt mich noch zur Weißglut, ich habe wirklich keine Ahnung wo in diesen simplen paar Zeilen der Fehler hängt!

Bitte um hilfe.
 
Das blank fehlt bei den eckigen Klammern:

if [<blank$# != 3<blank>]

lg
__tom
 
Das hat leider nichts gebracht o_O

ich werde noch bekloppt, dass ist genau so wie auf den Vorlesungsfolien. *suspect*
 
Also das:
PHP:
echo "Anzahl der Argumente: $#"
if [ $# != 3 ]
then
echo "Falsche Anzahl an Parametern"
fi
hat bei mir vollkommen hin gehauen. *noahnung*

Ich habe eine bash 4.2
 
Ich glaube ich habe den Fehler gefunden, ich habe die Datei mit Ultraedit auf einem Windows PC erstellt, (MS Office zwingt mich ja praktisch dazu mit den Dingern zu arbeiten)... hab es noch mal mit vim geschrieben und nun geht es...

edit: und natürlich mussten da Leerzeichen hin. ;)
 
[...] ich habe die Datei mit Ultraedit auf einem Windows PC erstellt
Also wenn du Skripte schon mit UltraEdit erstellst bzw. den überhaupt benutzt, dann kannst du damit auch gleich den Zeilenumbruch entsprechend um-/einstellen auf Linux. Das sollte das erste sein, was man macht, wenn man ein Linux-Skript anfängt zu schreiben, völlig egal ob Shell, Python, Perl oder was anderes.

(MS Office zwingt mich ja praktisch dazu mit den Dingern zu arbeiten)...
Ähm, was hat MS Office damit zu tun?

hab es noch mal mit vim geschrieben und nun geht es...
Ich hoffe, du hast dir keinen abgebrochen *buck*. Ich kann dem "Unsinn" Eingabemodus und Befehlsmodus von vi(m) absolut nichts abgewinnen. Nano hat eine vergleichsweise vernünftige Bedienweise, jedenfalls für solch einfache Dinge. Insofern verstehe ich auch nicht, wenn die im Netz zu findenden Anleitungen vi(m) verwenden und nicht die für Anfänger IMO besser geeigneten Editoren. Aber vielleicht bin ich einfach zu verwöhnt von anderen Editoren wie nano und mcedit ;).

MfG Dalai
 
Auf Gefahr hin geschlagen zu werden: Ich habe aktuell gar kein Linux auf meinem PC installiert, ich benutze den SSH Client PuTTY um auf die Linux PCs an meiner Uni zuzugreifen... selbst wenn ich in der Uni lerne benutze ich ausschließlich die Windows Maschinen. Pure Gewohnheit, eventuell schaue ich mir mal die aktuelle Ubuntu Version an, wobei ich Unity extrem gewöhnungsbedürftig finde.
 
Wenn man auf Windows richtig arbeiten will gibts Gott sei Dank cygwin

lg
__tom
 
Ich habe aktuell gar kein Linux auf meinem PC installiert, ich benutze den SSH Client PuTTY um auf die Linux PCs an meiner Uni zuzugreifen...
Das ist ja egal, ich mache das genauso. Ich wollte nur sagen, dass UltraEdit durchaus ohne Umwege lauffähige Linux-Skripte erstellen kann und auf jedem ordentlichen Linux auch nano als Editor verfügbar ist ;).

MfG Dalai
 
Ich find vim auf der Console immer noch am besten.

Ich empfehle dir vor der if ne "case" zusetzen. Damit kannst du ungültige Paramenter abfangen.
Auch sollte man nicht blind Variablen einlesen. Beim Counten ist es ok. Denn bei Linux gibts da so markieren und rechte Maustaste, wenn da einer was falsches in der Zwischenablage hat, rumst es. :D

Nur so als Hinweis. Noch zu if-Anweisung.

if [ -f datei.txt ];then
echo "Datei vorhanden"
fi

if [ -d ordner ];then
echo "Ordner vorhanden"
fi

Auch solltest du die $# mit "" versehen. Wenn kein Wert angegeben ist, kann es auch zu nehm Fehler kommen. Also immer schön "" bei den if-Anweisungen verwenden.

Das aber für die Zukunft, wenn du mal vor dem Problem stehen solltest ne leere Variable einzubauen.
 
Zuletzt bearbeitet:
Man kann es doch mit jedem vernünftigen, d.h. bequemen Texteditor schreiben, statt sich mit vi einen abzubrechen. Nur eben im richtigen Zeilenumbruchformat erstellen/abspeichern. Ein halbwegs vernünftiger Editor bietet das an (z.B. bei Notepad++: Edit -> EOL Conversion). Und ggf. die Scriptdatei dann binär hochladen statt im Textmodus.
 
Ich hoffe, du hast dir keinen abgebrochen *buck*. Ich kann dem "Unsinn" Eingabemodus und Befehlsmodus von vi(m) absolut nichts abgewinnen. Nano hat eine vergleichsweise vernünftige Bedienweise, jedenfalls für solch einfache Dinge. Insofern verstehe ich auch nicht, wenn die im Netz zu findenden Anleitungen vi(m) verwenden und nicht die für Anfänger IMO besser geeigneten Editoren. Aber vielleicht bin ich einfach zu verwöhnt von anderen Editoren wie nano und mcedit ;).

MfG Dalai

Ein ungläubiger! Steinigt ihn!

Man kann es doch mit jedem vernünftigen, d.h. bequemen Texteditor schreiben, statt sich mit vi einen abzubrechen. Nur eben im richtigen Zeilenumbruchformat erstellen/abspeichern. Ein halbwegs vernünftiger Editor bietet das an (z.B. bei Notepad++: Edit -> EOL Conversion). Und ggf. die Scriptdatei dann binär hochladen statt im Textmodus.
Noch einer! *schonmal Steine sammelt*

Im ernst, ich konnte vim vorher auch nichts abgewinnen, aber ab einem gewissen Punkt limitiert nano einfach nur noch und vim hat unglaubliches potential. Derzeit benutze ich vielleicht 10% der Standardfunktionen von vim und bin damit trotzdem schon wesentlich schneller als mit nano.
.
EDIT :
.

Auf Gefahr hin geschlagen zu werden: Ich habe aktuell gar kein Linux auf meinem PC installiert, ich benutze den SSH Client PuTTY um auf die Linux PCs an meiner Uni zuzugreifen... selbst wenn ich in der Uni lerne benutze ich ausschließlich die Windows Maschinen. Pure Gewohnheit, eventuell schaue ich mir mal die aktuelle Ubuntu Version an, wobei ich Unity extrem gewöhnungsbedürftig finde.

Versuch lieber Mint. Das is derzeit in.

Wenn du was richtung informatik studierst dann freunde dich lieber mit linux an. wenn nicht .. dann bleib halt bei windows wenn du es lieber magst.
(ich kann niemanden zu seinem glück zwingen ... zumindest nicht übers internet)
 
Zuletzt bearbeitet:
@Ragas: hol schonmal Steine..

@Topiceröffner: entweder über eine VirtualBox ein gescheites Ubuntu installieren und GEDIT nutzen oder Notepad++ und den Zeilenumbruch auf Linux/Unix umstellen. Alternativ auch winscp und dort die Files im Editor bearbeiten.

vi, nano und emacs sind einfach nicht mehr zeitgemäß wenn man Zugriff auf eine GUI hat.
 
Du hast mit keinem wirklich jemals richtig gearbeitet, stimmts? :]

editor-learning-curve.png
 

... Ich sag nix.

Aber du hast recht. Nen schöner grafischer editor hat auch was.

Nur is mir bis jetzt noch keiner untergekommen mit dem es sich gut arbeiten lässt. Am ehesten mag ich immernoch gedit ... aber toll isses auch nit.
 
es sollte jeder den weg finden, wo er am schnellsten und besten ans ziel kommt. aber grad beim "bashen" komm ich halt mit vim am besten zurecht und ich rede hier nicht von 10 zeilen, sondern eher so von ca 1000 aufwärts :D

da man eh scripte für die console macht, ist der umweg über eine gui eher zeitraubend. in der zeit wo ich ":wq" sh ./testscript.sh eintippe, hast du nicht mit ner gui noch nicht abgespeichert. vi muss man nicht zu 100% kennen, aber suchen mit "/suchbegriff" + "n" für weitersuchen oder zeilenspringen mit ":102" (für Zeile 102) geht mit keiner gui schneller. andere bsp sind "dd" für zeile löschen, "i" für einfügen, "e" für ersetzen etc. in der zeit, wo man mit ner gui die maus in die hand nimmt hat man auf der console schon 3 zeilen getippt.

versuchmal mit nem gui-editor nen mysqldump von über 1 gb zu öffnen und dort in zeile 34000 nen fehler zu beheben. viel spaß :D
 
1) In dumps behebe ich keine Fehler sondern direkt auf der Datenbank ;-)
2) STRG+L, 102 um in Zeile 102 zu springen halte ich noch für ebenso angenehm.
3) Zeile löschen? Okay auch hier eine Taste mehr: STRG+-->, entf
4) Einzeiler tippe ich eher selten in Files sondern führe die direkt im Terminal aus.

Aber ich versteh schon was du meinst - es kommt immer auf den Anwendungszweck an. Große Logfiles schaue ich mir auch nicht in nem Editor an sondern nehme gleich Chainsaw oder andere darauf spezialisierte Tools.
 
in der zeit wo ich ":wq" sh ./testscript.sh eintippe, hast du nicht mit ner gui noch nicht abgespeichert.

.. du tippst echt :wq? mein prof hat immer gesagt dass die freundin die hornhaut die vom unnötigen tippen kommt nicht mag. :x spart zeit.
 
:wq aus dem Grund , weil ich nicht nur meine Scripte einsehe. Ist eher ne Art Sicherheit um nicht ausversehen Änderungen abzuspeichern. Auch ist es für mich angenehmer :wq einzugeben, hängt mit der Handposition auf der Tastatur zusammen :D

Mit den Shortcuts kann man auch in der GUI schnell unterwegs sein, auch werden die Kürzel ja für fast alle Programme übernommen. Bsp: STRG+F für suchen etc. Aber gegen die Behauptung vim sein "nicht mehr Zeit gemäß" wäre ich mich. Ein Admin der nur ssh-Zugang hat, weiß warum.
Es führen viele Wege zum Ziel, es ist halt die Frage welchen man beschreitet. Anderes Bsp wäre cut, (g)awk oder sed.

Achso und bitte nicht "vim" mit "vi" verwechseln, das sind Welten in der Bedienung.
 
Zuletzt bearbeitet:
das Problem ist einfaches und nennt newline

unter windows:
"\r\n"
unter linux:
"\n"

und WinXp ganz böse wegen falscher codierung.

notepad++ ganz das zum beispiel umstellen.

Ich selber nutze am liebsten kate der kann man das auch umstellen und den müsste es
mittlerweile auch unter win geben.
 
Zurück
Oben Unten