Bash vs. Python: Wo sind Funktionen effizienter?

In der Systemadministration dominieren zwei Sprachen: Bash und Python. Beide haben ihre eigenen Stärken und Schwächen und bieten unterschiedliche Ansätze zur Lösung ähnlicher Probleme. Während Bash seit Jahrzehnten ein fester Bestandteil der Linux-Welt ist, hat Python in den letzten Jahren erheblich an Popularität gewonnen.

In Bash und Python können Funktionen definiert werden, jedoch unterscheiden sie sich deutlich in Syntax und Funktionalität. In diesem Artikel werde ich die Stärken und Schwächen beider Sprachen in Bezug auf die Erstellung von Funktionen untersuchen. Ich werde ein einfaches Beispiel zeigen, warum Funktionen in Python oft besser für komplexe Aufgaben sind.

Ich werde dabei auf Lesbarkeit, Fehlerbehandlung und Flexibilität eingehen. Dieser Artikel bietet dir wertvolle Einblicke und praktische Beispiele, um zu entscheiden, in welcher Sprache dein nächstes Skript entstehen soll. Und keine Sorge, Python lernt man schnell. Die Syntax ist übersichtlich, und dank diverser Module lassen sich Linux-Kommandos ohne große Umschweife ausführen.

Ausgangslage für den Vergleich:

Für diesen Artikel habe ich ein Beispiel aus meine Homelab gewählt. Dort betreibe ich ein DNS-Cluster, bestehend aus 2 Nodes. Nach einem Update möchte ich sicherstellen, dass alles weiterhin reibungslos funktioniert. Das Überprüfen der Logs ist dabei natürlich Gold wert. Zusätzlich möchte ich einen Testprozess einführen, ähnlich wie ich es in CI/CD-Pipelines tue.

Für diese Aufgabe benötige ich ein Skript, das verschiedene DNS-Records von beiden Nameservern des Clusters abfragt. Da das Setup nicht nur rein rekursiv ist, sondern auch eigene Master- und Slave-Zonen verwaltet, müssen sowohl klassische Forward-Lookups als auch Reverse-Lookups durchgeführt werden. Außerdem soll eine Erfolgs- oder Fehlermeldung ausgegeben werden.

Um das Skript übersichtlich zu halten, ist eine Funktion erforderlich, die diese Aufgabe erledigt. Hier stellt sich die Frage, ob man das Ganze in Bash oder Python umsetzt. Python hat sich als die bessere Wahl erwiesen, da es die Übergabe von benannten Parametern ermöglicht, was die Lesbarkeit und Wartbarkeit des Codes erheblich verbessert. In Bash ist das hingegen nicht möglich.

Das mag jetzt erstmal verwirrend klingen, gemeint ist dabei Folgendes:

In Bash muss man genau zu wissen, welche Bedeutung das erste false und das zweite true haben. Verwechseln darf man hier also nichts. In Python hingegen ist dies sofort ersichtlich, und man spart sich die Notwendigkeit, explizit reverse_lookup=False anzugeben, da dies bereits als Standardwert in der Funktion festgelegt ist. In puncto Übersichtlichkeit geht der Sieg also ganz klar an Python.

Eingefleischte Linuxer der ersten Stunde werden jetzt anmerken, dass man in Bash direkt mit dem dig-Kommando arbeiten kann – und das stimmt auch. In Python muss man hingegen das Modul subprocess einbinden und den Befehl über subprocess.run(command, capture_output=True, text=True) ausführen. Hier gestaltet Python die Sache also etwas komplizierter.

Wer hat am Ende die Nase vorn?

Lange wollte ich es nicht wahrhaben, aber Python bietet tatsächlich eine flexiblere Möglichkeit, Funktionen zu definieren und zu verwenden. Die Syntax ist intuitiver und erlaubt zusätzliche Konzepte wie benannte Parameter, die die Lesbarkeit und Wartbarkeit des Codes erheblich verbessern. Außerdem können die Werte in beliebiger Reihenfolge übergeben werden.

Bash ist immer dann eine gute Wahl, wenn Skripte notwendig sind, die auch von Systemadministratoren ohne umfassende Scripting-Kenntnisse verstanden werden sollen. Zudem sind die Einstiegshürden niedrig, und man kann schnell zu einem brauchbaren Ergebnis kommen. Sobald man aber komplexere Dinge entwickeln möchte, führt kein Weg an Python vorbei.

Zum Glück ist die Sprache inzwischen auf fast allen Linux-Systemen vorinstalliert. Es ist wichtig zu beachten, dass Python-Skripte Linux-Kommandos nicht nativ ausführen können. Dafür werden Module wie subprocess oder os.system benötigt. Diese sind aber Teil der Standardbibliothek von Python und müssen daher nicht zusätzlich installiert werden. Sie funktionieren also out of the box.

Von Fabian Wüst

Er ist leidenschaftlicher Open-Source-Benutzer und ein begeisterter Technologie-Enthusiast. Als kreativer Kopf hinter Homelabtopia bringt Fabian hier seine umfangreiche Erfahrung als Linux-Admin ein. Um sicherzustellen, dass du aus seinen Beiträgen den größtmöglichen Nutzen ziehen kannst, führt er ausgiebige Tests durch und errichtet dafür immense Setups.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert