Ich habe einige Male versucht, Shell (Bash) -Skripte zu lernen, wurde aber von der Syntax verdrängt. Dann fand ich Python und konnte die meisten Dinge tun, die ein Shell-Skript in Python tun kann. Ich bin mir jetzt nicht sicher, ob ich meine Zeit mehr in das Erlernen von Shell-Skripten investieren soll. Also möchte ich fragen:
Was sind die Stärken von Shell-Skripten, die es im Vergleich zu Python zu einem unverzichtbaren Werkzeug machen?
Ich bin keine Systemadministration von Beruf, aber ich bin daran interessiert, Linux-Systeme für Heimanwender einzurichten. Daher denke ich, dass das Erlernen von Shell-Skripten notwendig werden kann.
bash
Shell nicht allgemein für alle Linux-Distributionen verfügbar ist, insbesondere für eingebettete Systeme und andere, auf denen diebusybox
ausführbare Datei ausgeführt wird. Skripte, die auf diebash
abwärtskompatible Bourne-Shell selbst abzielen , können auf allen POSIX-kompatiblen Systemen ausgeführt werden. Diese Sprache ist jedoch wesentlich eingeschränkter als die vonbash
."Was sind die Stärken von Shell-Skripten, die es im Vergleich zu Python zu einem unverzichtbaren Werkzeug machen?"
Die Schale ist nicht unverzichtbar. Warum denkst du, gibt es so viele? bash, tcsh, csh, sh usw. usw. usw.
Python ist eine Shell. Nicht die, die Sie zum Ausführen aller Befehle verwenden würden, aber für die Skripterstellung ist sie ideal.
Python ist ein mehr oder weniger Standardbestandteil aller Linux-Distributionen.
Die traditionelleren Muscheln machen zu viele Dinge.
Sie haben eine praktische Benutzeroberfläche zum Ausführen von Befehlen. Dies umfasst einzeilige Befehle, bei denen die Shell Ihren PATH durchsucht, das angeforderte Programm gabelt und ausführt. Es enthält auch Pipelines, Sequenzen und gleichzeitig Programme (unter Verwendung
;
,|
und&
) sowie einige Umleitung (mit>
und<
).Sie haben eine miese kleine programmiersprachenähnliche Fähigkeit zum Ausführen von Skripten. Diese Sprache ist ziemlich schwer zu benutzen und äußerst ineffizient. Die meisten Anweisungen in dieser Sprache erfordern das Verzweigen eines oder mehrerer zusätzlicher Prozesse, wodurch Zeit und Speicher verschwendet werden.
Programme von der Shell ausführen, stderr in eine Protokolldatei umleiten und so etwas ist gut. Mach das in der Shell.
Fast alles andere kann als Python-Skript effizienter und klarer ausgeführt werden.
Du brauchst beides . Sie sollten jedoch niemals ein Skript mit if-Anweisungen oder Schleifen in einer traditionellen Shell-Sprache schreiben.
quelle
if
Anweisung wird häufig dastest
Programm ausgeführt. Die Shell ist in jeder Hinsicht eine miese Programmiersprache.bash
verfügen ( zumindest) über integrierte Funktionen für die Entscheidungsfindung (z. B.test
sind sie integriertebash
Funktionen, zusätzlich zu vielseitigeren Konstrukten). Es hat sicherlich seine Schwächen, aber auch seine Stärken. Es lohnt sich auch, im Detail zu lernen, da es sich um ein ganz anderes Paradigma handelt als andere Arten von Sprachen.cat "$1" | ssh "$2" "cat - >\"$1\""
gezeugtscp
. Sie wussten, wie man es am besten entwirft, weil sie es bereits benutzten.Die Shell macht allgemeine und einfache Aktionen wirklich einfach, auf Kosten komplexerer Dinge viel, viel komplexer.
In der Regel ist ein kleines Shell-Skript kürzer und einfacher als das entsprechende Python-Programm, aber das Python-Programm akzeptiert Änderungen ordnungsgemäß, während das Shell-Skript beim Hinzufügen von Code immer weniger wartbar wird.
Dies hat zur Folge, dass Sie für eine optimale tägliche Produktivität Shell-Skripte benötigen. Sie sollten diese jedoch hauptsächlich für Wegwerfskripte verwenden und Python überall verwenden.
quelle
Mit Shell-Skripten können Sie nichts tun, was Sie mit Python nicht tun können. Der große Vorteil von Shell-Skripten besteht darin, dass Sie dieselben Befehle verwenden wie bei der Verwendung der Shell. Wenn Sie also ein schwerer Shell-Benutzer sind, wird Shell-Scripting irgendwann zu einer sehr schnellen und einfachen Möglichkeit, Ihre Shell-Arbeit zu automatisieren .
Ich finde es auch einfacher, mit Datenpipes in Shell-Skripten umzugehen als in Python, obwohl dies mit Python absolut machbar ist.
Und schließlich müssen Sie keinen zusätzlichen Interpeter starten, um die Shell-Skripte auszuführen. Dies bietet Ihnen einen sehr kleinen, aber manchmal spürbaren Vorteil in Bezug auf Geschwindigkeit und Speichernutzung.
Andererseits sind Python-Skripte viel wartbarer. Ich versuche aus genau diesem Grund, von großen hässlichen Shell-Skripten zu Python-Skripten zu migrieren. Es ist auch einfacher, mit Python Ausnahmebehandlung und Qualitätssicherung durchzuführen.
quelle
man muss kein Shell-Scripting lernen, wie alle vorherigen Antworten zeigen; Aber Lernen ist niemals eine schlechte Sache. Es ist wirklich eine Frage der persönlichen Prioritäten. Es ist sehr schwer für jemanden, Ihnen zu sagen, was Ihre Zeit wert ist und was nicht.
Die meisten Programmierer stellen fest, dass das Erlernen neuer Sprachen jedes Mal schrittweise einfacher wird. (Dasselbe gilt weitgehend auch für natürliche Sprachen.) Und je früher Sie beginnen, desto besser.
Plus: Wenn Sie eine Sprache gelernt haben, können Sie ihre Grenzen auf extravagante Weise aus einer Position des vollständigen Wissens und der Vertrautheit herauslösen. Das wird dich wahrscheinlich nicht fertig machen, könnte dir aber ein Bier von deinen Kollegen einbringen!
quelle
Ich stimme den meisten vorherigen Antworten zu. Ich halte Shell-Befehle für am besten geeignet für dateisystemorientierte Aufgaben (Kopieren und Verschieben von Dateien, grep usw.). Shell ist meiner Meinung nach besser, wenn Sie in eine Datei lesen und schreiben müssen, da eine einzelne
>>file.txt
Umleitung sofort an die Datei angehängt wird, anstatt beispielsweisefile=open('file.txt','a'); file.write()
usw. zu benötigen .Derzeit mische ich für meinen persönlichen Gebrauch beides, erstelle ein Python-Skript und rufe jedes Mal os.system ('Befehl') oder os.popen ('Befehl') auf, wenn eine Aktion in der Shell einfacher ist als in Python.
quelle
Die Shell ist überall verfügbar. Wenn Sie sich an einen relativ einfachen Satz tragbarer Funktionen halten, können Ihre Skripte auf Mobiltelefonen, WLAN-Routern, DVRs, Netbooks, Workstations, großen Eisenservern und dergleichen ausgeführt werden. Python ist auf vielen Systemen nicht unbedingt sofort verfügbar, und je nach Umgebung kann es schwierig sein, es zu installieren.
Das Erlernen von Shell-Skripten kann Ihnen auch dabei helfen, einige Befehlszeilentricks zu erlernen, da die Befehlszeile die Shell ist. Es ist auch gut, wenn Sie eine ziemlich lange und komplizierte Befehlszeile benötigen und diese in ein allgemeineres Skript konvertieren, nachdem Sie festgestellt haben, dass Sie es noch mehr benötigen.
Die Shell hat auch einige ziemlich mächtige Funktionen; Pipelines sind ein wirklich interessantes Kontrollkonstrukt, das meines Wissens nur in der Shell vorkommt.
quelle
Eine andere Sache, die bei der Auswahl von Shell-Skripten von Python berücksichtigt werden muss, ist die Python-Version, die auf den Zielcomputern ausgeführt wird. RHEL5 (um nur einen zu nennen) wird es noch lange geben. RHEL5 steckt in Python 2.4 fest. Es gibt viele nette Bibliotheken, die von der Funktionalität abhängen, die Python nach 2.4 hinzugefügt wurde.
quelle