PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ab wann sollte man sich von der bash verabschieden?



jean_luc_picard
13-05-2004, 17:23
Hallo Leute,

ich habe mir ein Skript geschrieben, welches mittlerweile recht umfangreich geworden ist (geht gegen 1000 Zeilen). Ich stelle fest, dass es nicht besonders schnell abläuft. Ich frage mich daher, ob ich versuchen soll Optimierungen vorzunehmen oder besser gleich auf eine andere Sprache umzusteigen. Ich habe gelesen, dass perl sehr schnell sein soll und an kompilierte Programme heranreicht. Vielleicht ist aber auch c besser geeignet?

Es handelt sich bei dem Programm übrigends um eine Firewall. Dabei werden Konfigurationsdateien interpretiert und daraus die iptables-Aufrufe generiert...

Gruß, Picard

peschmae
13-05-2004, 17:37
die Anwendung ist - so wie ich das verstehe nicht Zeitkritisch, oder?

Naja, für Programme > 250 Zeilen würde ich auch nicht mehr Bash verwenden. Da käme dann tatsächlich Perl zum Zuge - kann ich eigentlich als Bash-Ersatz/Ergänzung nur empfehlen. :)

MfG Peschmä

CYP
13-05-2004, 18:16
ja perl ist sicher die beste wahl
einfach (auf alle fälle für alte bash scripter)
schnell
läuft auf jedem wichtigen os

jean_luc_picard
13-05-2004, 18:18
Ok, dann werde ich mich mal an Perl ranwagen ;)

Danke für die Tips

Gruß Picard

RapidMax
13-05-2004, 21:16
Wenn es überall laufen soll, d.h. nicht primär für sich selbst ist, sondern von vielen Leuten unter vielen Systemen laufen soll, dann würde ich bei Shell-Scripten bleiben.

Shellscripte haben durchaus Optimierungs-Potential. Allerdings lohnt es sich auch hier nicht "im Voraus" zu optimieren, sondern man sollte das/die Bottleneck(s) suchen und dort geziehlt Optimieren. Beispiel:
Oft werden Dateien mehrmals eingelesen und gefiltert. Hier könnte man durch Ändern des Algorithmus und/oder durch ein sed/awk-Script optimieren. Auch Vorfiltern und Zwischenspeichern von Ergebnissen ist denkbar. Man sollte auch versuchen die Anzahl neu erzeugter Prozesse durch geschicktes Umstellen einzudämmen.

Ansonsten ist neben Perl auch Python denkbar.

Gruss, Andy

peschmae
14-05-2004, 07:20
Original geschrieben von RapidMax
Wenn es überall laufen soll, d.h. nicht primär für sich selbst ist, sondern von vielen Leuten unter vielen Systemen laufen soll, dann würde ich bei Shell-Scripten bleiben.

Ist gerade hier nicht Perl besser geeignet?

Die Portabilität von Shellscripts ist ja auch nicht einfach so gegeben weil z.B. die verwendeten Tools anderer Plattformen oft weniger können als die GNU-Pendants (siehe hier (http://www.mrunix.de/forums/showthread.php?s=&threadid=34726)). Natürlich lässt sich das (fast) alles auch ohne die Zusatzfunktionalität der GNU-Tools machen, aber ein gewisser Portierungsaufwand ist da schon gegeben.

In der Folge denke ich wäre für grössere Projekte, die man eben nicht nur für sich selber schriebt, eine "richtige" Scriptsprache wie Perl/Python/Ruby besser geeignet, weil es dort diese Probleme nicht gibt. Es sei denn die liefen auf Tru64 und ähnlichen Systemen gar nicht erst - aber das glaube ich nicht wirklich.

MfG Peschmä

fork
14-05-2004, 13:38
> Die Portabilität von Shellscripts ist ja auch nicht einfach so gegeben weil

...die Optionen der Programme entweder andere sind oder gleiche Optionen eine andere
Bedeutung haben.

Die Bash gehoert bei True64 nicht(V4.0F) zum Lieferumfang.

RapidMax
14-05-2004, 22:40
Mittlerweile haben tatsächlich viele Systeme Perl. Dennoch will man nicht immer Perl installieren. Auch kann man nicht beliebige Perl-Bibliotheken benutzen, ohne dass sie nachinstalliert werden müssen (Trotz CPAN).

Shell-Scripte sind auch nicht automatisch Portabel: Man muss natürlich darauf achten, den kleinsten gemeinsamen Nenner zu finden.

GNU Autoconf-Scripte sind aus diesen Überlegungen als Shell-Scripte realisiert.

Ich bin aber auch der Meinung dass in vielen Fällen Perl vorausgesetzt werden darf.

Gruss, Andy

jean_luc_picard
14-05-2004, 22:46
Naja, ich will das Skript nur kompatibel zu Linux halten, das reicht mir ;).
Nun habe ich auch schon einige Stunden in Perl investiert und bin erstmal begeistert :). Ich denke, dass ist für meine Zwecke schon eine sehr gute Lösung.

@RapidMax
Da hast du sicher eine Schwachstelle meines alten bash-Skripts angesprochen. Bei diesem werden nämlich in der jetzigen Form einige Dateien öfter geparst als nötig. Kann man grundsätzlich sagen, dass man bereits ab zwei oder drei Zugriffen auf eine Datei, diese lieber in eine Variable verfrachtet? Ich meine dabei natürlich nur kleine Textdateien... vielleicht 5-50 Zeilen.

Gruß, Picard

peschmae
15-05-2004, 07:06
Ob es was bringt findest du im konkreten Fall eigentlich nur durch ausprobieren raus. Vor allem ob es spürbar was bringt (und nicht nur eine halbe Sekunde übers ganze Script).

Ein bisschen schätzen kann man schon - ich denke das würde was bringen. Du hast ja genug Arbeitsspeicher für so kleine Dateien und dort kann dann auch viel schneller darauf zugegriffen werden.

MfG Peschmä