-
Welche Script-Sprache
Hallo zusammen,
auch wenn ich in der Vergangenheit kleinere Bash-Skripte geschrieben habe kann man die wohl kaum als "programmiert" betrachten. Da Skripte aber für viele Aufgaben nützlich sind will ich eine Skript-Sprache lernen. Habe mal etwas recherchiert und ein paar Hinweise gefunden das Bash-Skripte nicht mehr "on vogue" sind. Ist das so?
Die Skripte die ich erstellen möchte sollen:
- die gängigen Schleifen und Bedingungen ermöglichen
- Linux-Befehle ausführen
- Logfiles schreiben und per Mail senden
Soweit ich das beurteilen kann ist dies alles mit Bash-Skripten möglich. Öfter gelesen habe ich von Phyton gelesen. Ist Phyton auf den gängigen Distributionen per Grundinstallation verfügbar? Das war ja (zumindest früher) der Vorteil der Bash-Skripte dass sie auf fast allen Distros ohne einfach liefen.
Was benutzt Ihr?
Viele Grüße
pixel
-
Je nach konkreter Anforderung:
* Shell
* Perl
* PHP
meist aber Shell - im großen und ganzen gibt's nicht viel, was man damit nicht erledigt bekommt.
(python mag ich nicht, außerdem müssen die sich erst mal drüber klar werden, welche Version sie denn nun wollen)
Abgesehen davon: Der Thread hat das Potential, lustig zu werden. Kartoffelsalat steht bereit.
-
ja, ich habe ja zu Bash tendiert. Hatte nur im Web gefunden dass dies nicht mehr zeitgemäß wäre. Deshalb die Nachfrage.
... dann mach ich mal Schnitzel und hol Bier
-
Nicht mehr zeitgemäß - das heißt es irgendwann mal (meist temporär) zu jeder Programmiersprache.
Aber man muß ja auch nicht jeder Kuh nachlaufen, die durch's Dorf getrieben wird.
-
-
Wobei nicht mehr zeitgemäß auf Perl 5.x zutrifft, 6.x kommt nicht in die Pushen. Ich würde dir dringend zu Python raten, ich kann die Abneigung von einigen gut verstehen, aber ist aktuell die beste Skript Sprache, einfach nur weil das Tooling drum herum unfassbar gut ist. Alternativ LUA, da ist das Tooling aber bei weitem nicht soweit.
Was meine ich mit Tooling:
https://pypi.org/project/pip/
https://docs.python-guide.org/dev/virtualenvs/
https://www.python.org/dev/peps/pep-0008/
PyCharm
-
Um Shellscripte kommt man auf längere Sich nicht drumrum wenn man Linux/Unix ernsthaft administrieren will. Was willst Du machen? Komplexe Scripte schreiben geht mit allen, aber PHP hat bei Webanwendungen die Nase vorn, nur ist es nirgends per Default installiert also ist es eher suboptimal damit Scripte zu schreiben, die auf das System zugreifen.
-
Im Moment geht es hauptsächlich um ein Skript welches einen Snapshot der QCOW2-Files der laufenden VM erstellt, das orginal weg sichert und anschließend den Merge wieder durchführt. Die einzelnen Schritte sollen in ein Protokoll-File welches am Ende per Mail versendet wird. Tritt "unterwegs" ein Fehler auf müssen die bereits gelaufenen Schritte wieder rückgängig gemacht werden.
Ich denke auch das die Bash dazu am besten geeignet ist. Wie gesagt, mich hat nur ein User-Beitrag (wie erwähnt) etwas verunsichert. Habe mir entsprechende Literatur bestellt.
-
Ja. Das ist meist so, dass bash auf den meisten Distributionen verfügbar und installiert ist. Bash ist greift allerdings grundsätzlich auf eine Vielzahl externer Programme zu. Wenn Du portabel bleiben willst, dann musst Du Dir genau überlegen, welche externen Programme du verwendest. Im Vergleich dazu haben richtige Skriptsprachen(perl, python, ruby,..) mehr Funktionalität, die in Bash durch Aufruf externer Programme umgesetzt wird.
Bash ist grundsätzlich auch langsamer als andere Programmiersprachen, weil die meisten Befehle externe Aufrufe sind, während bei umfangreicheren Skriptsprachen zum Großteil alles Funktionen sind, die im aktuellen Prozess ausgeführt werden.
Auch die verschiedenen Schritte der Interpretation jeder einzelnen Befehlszeile macht die Programmierung in der Bash fehleranfälliger, sowie der Umgang mit globalen Variablen.
Insgesamt würde ich sagen, dass man kleine Scripte mit Bash gut schreiben kann, aber bei größeren Anliegen(Meine Grenze hierfür: ca. 200 Zeilen) die Finger davon lassen sollte.
Das Script von Dir ist wahrscheinlich eher klein und übersichtlich.
Ich selbst greife mitunter öfters zur bash, weil ich einfach schneller mit der Arbeit fertig bin. Ich bin aber auch schon hier und da an Grenzen gestossen, wo ich mich geärgert hatte, dass ich nicht doch lieber eine richtige Scriptsprache verwendet habe. Ab einer gewissen grösse wird es mit der Bash dann zunehmend weniger wartbar, langsamer und fehleranfälliger.
Was die Vorinstallation in den Linux-Distributionen in der Minimalinstallation betrifft:
- Perl 5 und Bash dürfte am weitesten verbreitet sein
- Python hat hier auch eine hohe Verbreitung
- Ich könnte mir aber vorstellen dass einige Distributionen standardmässig keine Bash mitbringen, sondern etwas kleineres(ash,sh,...)
-
Danke für die Erklärung. Ich werde erst mal mit der Bash anfangen.
-
Schöne neue Welt. Zu SunOS, AIX, IRIX und SCO-Zeiten war SH/KSH Standard (wobei die Masochisten CSH genutzt haben). Die Bash ist vollständig kompatibel zur SH, aber nicht umgekehrt. Wenn Du Bash-Scripte schreibst, kann es sein das die beim Einsatz eines Rettungssystems nicht funktionieren weil -wie fork schon gesagt hat - die SH bzw. Dash vorhanden ist (meistens aus Platzgründen). Ich kenne keine Linuxdistribution, die in der Standardinstallation keine Bash installiert. Bei Free- und OpenBSD ist es genau andersrum. Da muss die Bash erst installiert werden, da per Default die KSH/PDKSH (OpenBSD) und die SH/TCSH (FreeBSD) genutzt. Wenn Du vorhast Deine Scripte auf verschiedenen Systemen einzusetzen, dann verwende #!/bin/sh als Interpreter und eine SH-only-Syntax: https://www.grymoire.com/Unix/Sh.html
Rudimentäre Grundlagen in der Shellprogrammierung schaden aber nie.
-
Mir geht es um Debian basierende Server und Ubuntu Clients. Da sollte ich mit Bash-Skripten auf der sicheren Seite sein?
-
Ich kenne keine Linuxdistribution, die keine Bash als Default installiert. Also normale Installation und kein Rettungssystem. Wenn Du die Scripte nur unter Debian bzw. deren Derivate einsetzt, kannst Du Dich auf die Bash beschränken.
-
Evtl. sollte man den Täglichen Betrieb (dafür braucht man irgendwelche Scripte um Dinge zu automatisieren) mit einem Notfall in einem Rettungssystem (dort arbeitet man eher interaktiv, da es unterschiedliche Probleme gibt) unterscheiden.
Bei letzterem muss man die Shell und die Tools kennen, braucht man z.B. keine Schleifen oder Ein und Ausgaben.
Nach nach Anforderungen kann man sich auch die Powershell anschauen. Dadurch das Objekte und kein Text übergeben wird ist diese sehr mächtig, wenn es z.B. darum geht Daten (csv, listen) zu bearbeiten.
-
Wenn Kompatitbilität wichtig ist, kann man auch #!/bin/sh als She-Bang verwenden. Wenn /bin/sh ein Symlink auf /bin/bash ist, verhält sich bash dann Posix-konform.
Hier so ein paar Anmerkungen, was die bash hat und die Posix Shell nicht: https://stackoverflow.com/a/42666651 Bash ist durchaus etwas angenehmer zu nutzen.
Posix-Konformität heisst auch, dass man nur die Features von awk + sed + ... verwendet und nicht die GNU-Erweiterungen.
Ein schönes Tool, dass ich gerade kennen gelernt habe ist shellcheck. Es validiert Shell-Code, liefert hilfreiche Kommentare und Warnungen für die verschiedenen Shells. (bash, sh, ksh, ...)