(Ich bin nicht sicher, ob es eine angemessene Frage ist)
Shell-Skripte, wie die, die in geschrieben sind bash
, können viele Dinge tun. Sie können Unix-Programme aufrufen, ihre Ausgabe leiten, E / A von / zu Dateien umleiten, den Ablauf steuern, prüfen, ob eine Datei vorhanden ist usw.
Aber auch eine moderne Programmiersprache, zB python
und ruby
, kann dies. Und sie sind (glaube ich) lesbarer und wartbarer.
bash
genießt breite Akzeptanz. Aber viele Distributionen haben auch python
Interpreter installiert .
Was ist der Vorteil eines Shell-Skripts? Wenn ich schreiben könnte python
, ruby
oder perl
ist es wert , zu lernen bash
?
programming-languages
shell
Lai Yu-Hsuan
quelle
quelle
Antworten:
Shells verfügen über spezielle Funktionen zum Arbeiten mit Dateien und zum Abrufen von Daten von einem Programm in ein anderes (vorausgesetzt, es handelt sich bei den Daten um Text). Für diese Aufgaben können Shell-Skripte weniger umständlich sein als eine Skriptsprache wie Python.
Shell-Skripte haben auch den Vorteil, dass die Befehle, die Sie verwenden, im Grunde dieselben Befehle sind, die Sie über die Befehlszeile verwenden würden. Wenn Sie also etwas in der Shell tun können, sind Sie mehr als die Hälfte des Skripts für denselben Vorgang entfernt.
Hier ist zum Beispiel ein Bash-Skript, das alle PNG-Dateien aus dem aktuellen Verzeichnis in ein bestimmtes Verzeichnis verschiebt.
Hier ist eine Python-Version.
Sie werden feststellen:
mv
Befehls in Bash istsource
es in derselben Instanz der Shell ausführenglob.iglob("./*.png")
ist ein ziemlicher Bissen nur um es zu sagen*.png
Wenn Sie eine einfache Pipe-Operation in Python schreiben möchten, werden Sie über die Ausführlichkeit erstaunt sein. (Natürlich können einige Dinge, wie das Pipe-Through
grep
, durch Python-Code ersetzt werden, anstatt ein externes Programm zu verwenden. Daher müssen Sie häufig weniger Pipe-Vorgänge ausführen.)Als Gegenbeispiel musste ich einmal eine Routine schreiben, die prüfte, wie lange sich die einzelnen Dateinamen in einem bestimmten Verzeichnis befanden. Wenn sie länger waren als von einem bestimmten Betriebssystem unterstützt, mussten sie gekürzt werden. Dies könnte zu doppelten Dateinamen führen, die ich korrigieren musste, und da sie von einer Webseite verlinkt wurden, mussten die verkürzten Namen stabil sein, dh sie sollten so generiert werden, dass immer derselbe lange Dateiname resultierte der gleiche verkürzte Dateiname. Ich habe dazu ein hexadezimales md5 des langen Dateinamens generiert und die ersten vier Zeichen davon an den verkürzten Namen angehängt (Namen konnten immer noch kollidieren, aber es war sehr unsinnig, also habe ich nur nach dieser Bedingung gesucht und eine Kaution verlangt, falls dies eintreten sollte). .
Ich habe dies in Bash gemacht, weil es Teil unseres Build-Systems war, das bereits in Bash geschrieben wurde. Es war genauso schwer, das Richtige zu finden, wie Sie wahrscheinlich denken. Das Schreiben in Python hätte viel weniger Zeit in Anspruch genommen und wäre wahrscheinlich auch klarer gewesen.
Kurz gesagt: Verschiedene Sprachen sind für verschiedene Arten von Aufgaben konzipiert. Wählen Sie die Sprache aus, die für die jeweilige Aufgabe am besten geeignet ist.
quelle
mv *.png $1
tun (Kommentare behalten ihre Formatierung nicht bei), aber mit Perl können Sie auch Sprachfunktionen höherer Ebenen verwenden.Die vorhandenen Antworten sind auch gültig, aber es gibt einen Grund, den noch niemand erwähnt hat: weil es dort sein WIRD.
Jede gegebene * nix-Installation wird mit einigen optionalen Paketen durchgeführt, die möglicherweise geladen werden oder nicht, und nicht alle Systeme werden Python oder Perl oder Ruby haben. Wenn jedoch erwartet wird, dass das System überhaupt interaktive Funktionen bietet, verfügt es über eine Shell. Dies bedeutet, dass Shell-Skripte auf Systemen von Servern über Programmier-Desktops bis hin zu Sekretariats-Thin-Client-Desktops und eingebetteten Geräten auf jedem System funktionieren, das ein beschreibbares Dateisystem und eine Bash-Befehlszeile unterstützt.
Für jemanden, der nur in einer konsistenten Serverumgebung arbeitet, ist dies eine Selbstverständlichkeit und nicht so wichtig. Für jemanden, der in einem abwechslungsreichen Umfeld arbeitet, sollte dies nicht übersehen werden.
quelle
Ein wesentlicher Teil Ihrer Frage wird hier beantwortet:
Hier ist ein Auszug aus meiner Antwort auf diese Frage :
quelle
Ich würde sagen, ein Shell-Skript hat den Vorteil, wenn Sie nur eine supereinfache automatisierte Aufgabe ausführen möchten. Wenn Sie beispielsweise täglich um 5:00 Uhr ein Skript schreiben möchten, mit dem ein Verzeichnis von einem Server auf einen anderen gesichert wird, ist die Verwendung einer Hochleistungsprogrammiersprache ein Kinderspiel.
Wenn Ihre Programmieraufgabe dagegen eher Kontrollstrukturen (if / then / else), iterative Strukturen (Schleifen), Datenbank- und Datei-E / A usw. benötigt, ist sie wahrscheinlich besser für eine leistungsfähigere Aufgabe geeignet Programmiersprache als ein Shell-Skript.
Ich denke, eine gute Faustregel ist:
quelle
shellScript() if automatingSimpleTask else programmingLanguage()
lol sein.Während Sie Programme von einem Python / Ruby / beliebigen Programm starten können, ist dies in der Shell anders. Möglicherweise müssen Sie eine API verwenden, um etwas zu starten - beispielsweise fork (). In einem Shell-Skript verhalten sich Programme eher wie Funktionen in einer herkömmlichen Programmiersprache und können mit minimalem Aufwand ausgeführt, weitergeleitet usw. werden. Auch mit Pipes ist der Datenfluss sehr übersichtlich.
quelle
Wenn Sie die Programmiersprache, die Sie für bestimmte Aufgaben verwenden, völlig frei wählen können, könnten Sie wahrscheinlich das Erlernen von Bash fast vollständig vermeiden und jede Skriptprogrammierungsaufgabe mit Perl, Python oder Ruby ausführen. Dies kann manchmal zu einer ausführlicheren Lösung führen, insbesondere dann, wenn Sie nur ein Skript benötigen, das eine Sequenz anderer Unix-Tools aufruft. In komplexeren Fällen können Sie mit diesen modernen Skriptsprachen jedoch besser verwaltbaren Code schreiben (Sie geben Ihnen auch mehr Möglichkeiten, verschleierten Code zu schreiben, aber das ist Ihre Wahl).
Andererseits können wir die Sprache, die uns am besten gefällt, oft nicht frei wählen, da wir mit Legacy-Code oder Code arbeiten müssen, der von jemandem geschrieben wurde, der Bash kannte, aber keine der von Ihnen genannten Skriptsprachen kannte.
quelle
Shell Scripting ist eine interpretierte Programmiersprache. Hier sind einige Gründe, warum ich mich dazu entschlossen habe, Skripte in Bash anstelle von Perl oder Python oder einer anderen Skriptsprache zu schreiben:
Funktioniert überall : Komplexere Interpreter sind möglicherweise nicht immer verfügbar, z. B. während des Systemstarts oder auf eingebetteten Systemen. Bash ist auch in der Busybox verfügbar.
Funktioniert in der Befehlszeile : Wenn Sie mit Shell-Skripten vertraut sind, können Sie diese Fähigkeiten verwenden, um komplexe Aufgaben in Ad-hoc-Skripten direkt in der Befehlszeile auszuführen. Ich benutze diese Fähigkeit täglich als Sysadmin.
Einfacheres Schreiben von Programmen, die andere Programme aufrufen: Wenn Sie versuchen, mehrere vorhandene Programme auf interessante Weise miteinander zu verketten, ist die Ausführung in einem Shell-Skript möglicherweise einfacher als in einer höheren Sprache.
Wenn das Programm 30 Zeilen oder weniger enthält, schreibe ich es normalerweise mithilfe von Shell-Skripten. Wenn es um komplexe Manipulationen oder komplexe Analysen geht, mache ich das mit Python oder Perl.
quelle
Sie sollten sich Coffeescript ansehen. Ihre Worte:
Die goldene Regel von CoffeeScript lautet: "Es ist nur JavaScript".
Nun ... hier kommt die Super-Anfänger-Antwort.
Als Anfänger mit automatischem Lernen in den letzten 6 Monaten und mit ein wenig C, C ++, Javascript und mehr Bashscript in den letzten Tagen ... kann ich Ihnen sagen:
und ist das nicht einfach fantastisch? ? Schleifen und Variablen? Beeindruckend!
Bitte sag mir, wo du das siehst. Ich habe bashscript in gedit geschrieben, auch in geany, und ich kann formatieren (tabs?) Und ich lese meinen Code in Lichtgeschwindigkeit mit bashscript im Vergleich zu anderen Sprachen.
Verfügt diese Sprache über andere Tools, um Ordnung zu halten? Ich weiß, objektorientiert viel Code zu speichern, aber ... die Leute sagen, BashScript ist auch OO! WOW 2! Das ist mein Punkt hier. Gehe zu:
befindet sich in dieser Frage: Wie kann man mit Perl, Phyton oder Ruby tun, was dieses blöde Zeug kann? Es ist einfach?
( bashdamnthing = xdotool )
quelle