Skript-Alternativen zu Bash-Shell-Skripten

16

Ich habe gerade auf eine UNIX-Workstation migriert. Meine Erinnerung an Bash-Shell-Skripte ist seit der Schule verblasst und ich finde die Syntax sehr verwirrend. Ich frage mich, welche anderen Skriptsprachen zur Automatisierung von Aufgaben verwendet werden. Die beiden beliebtesten, von denen ich gehört habe, sind Perl und Python.

  1. Welche Skriptsprache wird in Geschäften der realen Welt am häufigsten verwendet?
  2. Welche Skriptsprache ähnelt am ehesten der C / C ++ - Syntax?
  3. Gibt es eine andere Skriptsprache, die ich nicht kenne?

Danke für Ihre Hilfe,

Scott

Scott Davies
quelle
2
Dies sollte wahrscheinlich ein Community-Wiki sein.
EBGreen
2
Eigentlich benutze ich PHP jetzt für die meisten Systemaufgaben. Ich werde demnächst eine richtige Antwort zusammenstellen. Es hat viele Bibliotheken eingebaut, was praktisch ist.
Kyle Hodgson
Von der Shell bestimmte Sprachen tun etwas, was andere Sprachen möglicherweise nicht tun. Damit werden alle untergeordneten Prozesse verwaltet und überwacht, die jemals rekursiv erzeugt wurden. Der Blog mit Werbung für Phusion Passenger erklärt im Detail, warum: phusion.github.io/baseimage-docker Kurz gesagt, Ihre in lang-x geschriebenen Skripte behandeln Herunterfahrroutinen wahrscheinlich nicht richtig. Was vollkommen in Ordnung ist, solange Sie sie als Kinder eines echten Shell-Prozesses ausführen. Haftungsausschluss, ich bin kein Experte. Diese Informationen sind nach bestem Wissen und Gewissen fehlerhaft.
ThorSummoner

Antworten:

12

Bis zu einem gewissen Grad ist es eine Frage der persönlichen Präferenz. Perl und Python sind definitiv sehr beliebt.

Um zwei Ihrer drei Fragen zu beantworten:

  1. Ich würde vermuten, dass Bash am häufigsten verwendet wird, wahrscheinlich gefolgt von Perl. Ich rate nur, keine Ahnung, ob jemand eine Umfrage durchgeführt hat. :)
  2. Es gibt Unmengen von Skriptsprachen. :)

Meine Empfehlung ist jedoch Python. Es ist einfach zu lesen und zu schreiben, immens leistungsfähig und es gibt Unmengen nützlicher Ressourcen im Web, um es zu lernen, ganz zu schweigen von Code, den Sie kopieren und neu verwenden können.

DictatorBob
quelle
1
Ich stimme dem zu. Ich finde, dass Python leicht zu erlernen ist und alles kann, was ich draufhabe, da es in guten alten OS / 2-Tagen mit REXX war.
Slovon
3
+1 für Python ... die Kraft von C in einer Skriptsprache. Sie können Ihre Skripte so einfach oder so komplex gestalten, wie Sie möchten;)
KFro
1
Auf Nicht-NT-Systemen macht das Python-Modul shdie Verwendung von Python als Shell-Skriptsprache zugänglich. Wenn Sie jedoch auf Randfälle stoßen (wie Multiprocessing), müssen Sie das Teilprozessmodul lernen, das ich bis heute als zu schwierig empfinde, um es nur zu verwenden.
ThorSummoner
5

Perl und Python sind die offensichtlichen Antworten; aber jeder von ihnen wird verwendet, um verschiedene Aufgaben zu erledigen:

  1. Bash - Zweifellos am einfachsten zu erlernen. Mit Bash-Skripten führen Sie Befehle aus und bearbeiten die Ausgabe.
  2. Python - Zweitens am einfachsten zu lernen. Python ist weitaus nützlicher als Bash, da Sie mit Python vollständige Programme schreiben können und es von der Community gut unterstützt wird. Python ist auch sehr gut lesbar und kann Monate später problemlos bearbeitet werden.
  3. Perl - Das Beste von dreien (für Skripte), aber leicht die steilste Lernkurve. Hat sehr gute Unterstützung für reguläre Ausdrücke (was der Hauptgrund dafür ist, dass es heute noch verwendet wird), und Sie werden mit der Zeit wahrscheinlich auf viele Perl-Skripte stoßen. Das Hauptproblem bei Perl ist die Lesbarkeit des Codes - Monate nachdem Sie Code geschrieben haben, können Sie nicht herausfinden, was er tut. Sie sollten also einen starken Kommentar abgeben.
  4. Awk / Sed - Beide sind sehr nützlich, aber beide sehr schwer zu lernen. Ich würde vorschlagen, diese letzten anzugehen, es sei denn, Sie sind gut in Mustern.

Ich würde Python lernen, da Sie vermutlich keinen von ihnen kennen. Es ist am einfachsten und nützlichsten zu wissen.

Und was die Antworten auf Ihre Fragen betrifft:

Welche Skriptsprache wird in Geschäften der realen Welt am häufigsten verwendet?

Sie alle, aber ich würde mir vorstellen, dass Perl hier einen kleinen Vorteil hat (weil es schon viel länger in der Systemadministration verwendet wird).

Welche Skriptsprache ähnelt am ehesten der C / C ++ - Syntax?

Perl

Gibt es eine andere Skriptsprache, die ich nicht kenne?

Ruby, Tcsh / Csh, http://en.wikipedia.org/wiki/Interpreted_language

Michael Pobega
quelle
2
Wenn Sie etwas Zeit in Perl investieren, können Sie perfekt lesbares Perl schreiben. Leute, die Spaghetti-Code schreiben, sind zu schnell, um Perl für ihre Fehler verantwortlich zu machen.
Cian
1
Ich spreche nur aufgrund von Erfahrungen als Sysadmin. Ich musste Code pflegen, den andere Leute geschrieben haben, der verdammt unmöglich zu lesen war. Normalerweise schreibe ich den Code einfach in Python um.
Michael Pobega
3

awk für kleine aufträge, python für mehr als oneliners.

Python (wenn Sie keine spezifischen APIs und andere plattformabhängige Dinge verwenden) verfügt über eine umfangreiche "Standardbibliothek", die auf allen Plattformen verfügbar ist, auf denen Sie die Python-Version verwenden. Das ist sehr schön, da Sie Ihre Skripte einfach wiederverwenden können und Ihr Wissen eine gute Investition ist, selbst wenn Sie Ihre Plattform wechseln.

In unserem Unternehmen verwenden wir Python für alle Skripte, Überwachungen und Java für die Anwendung, und wir sind in einer heterogenen Umgebung gut aufgehoben.

slowonisch
quelle
1

Ich würde sagen, dass Perl und Python wahrscheinlich die beiden besten Alternativen sind. Mit sed und awk kann man auch viel anfangen.

EBGreen
quelle
1

Sh (Bournemuschel), grep, awk und sed ist immer eine gute Sache, um wieder in den Griff zu bekommen. Perl eignet sich hervorragend, wenn Sie nicht viel Text regulieren und die Wartbarkeit nicht so wichtig ist (ohne zu sagen, dass dies nicht möglich ist). Python; wenn Ihnen die Lesbarkeit wichtig ist. Ich bevorzuge Python, aber all diese Werkzeuge sind gut für die meisten Dinge, die Sie darauf werfen. Möglicherweise möchten Sie die Syntaxanforderungen für C / C ++ überdenken. Wenn Sie nicht weiterkommen, wird dies Ihnen auf lange Sicht nicht helfen.

Martin P. Hellwig
quelle
Vielen Dank, Martin. Ich habe festgestellt (aus Beispielen im Web), dass Perl eine bemerkenswerte Ähnlichkeit mit PHP aufweist (obwohl ich sicher bin, dass es historisch gesehen Perl vor PHP war). Ist das eine faire Aussage?
Scott Davies
PHP 1.0 war ein Perl-Skript, also ist es kein Zufall :)
Bill Weiss
1

Wenn Sie etwas von Grund auf lernen möchten, ist es wahrscheinlich am besten, bash (neu) zu lernen.

Darüber hinaus sind Perl und Python heutzutage sehr beliebt. Ich bin ein Teil von Perl, aber mein Perl-Skriptstil hat sich seit der Veröffentlichung von Perl 4 nicht wesentlich geändert.

Mir sind keine "C-Syntax-ähnlichen" Skriptsprachen bekannt.

David Mackintosh
quelle
1

Perl, zweifellos, wenn auch nur für die unglaubliche Ressource von CPAN ( http://search.cpan.org/ ). Der Vorteil einer Skriptsprache mit einer derart großen Community besteht darin, dass Sie wahrscheinlich nie selbst etwas erfinden müssen.

Perl hat auch den Vorteil, dass es so komplex ist, wie Sie es für die aktuelle Situation benötigen. Sie können es als einfache Skriptsprache für die schnelle Verwaltung oder für Einzelskripts behandeln, aber Sie können objektorientierte Konzepte oder umfangreiche Metaobjektsysteme verwenden, wenn Sie größere, einfach zu wartende Anwendungen (wie Daemons, Server, Clients) erstellen möchten.

Die Unterschiede zwischen den Skriptsprachen allein sind nicht gravierend genug, um einen eindeutigen Gewinner zu ermitteln. Sie sollten sich jedoch vor allem ansehen, wie einfach es für Sie sein wird, Informationen zu Themen zu finden, die Sie interessieren.

Die Perl-Syntax kann auch auffallend nahe an C heranreichen, solange Sie das Fehlen von Tipp- und Siegelzeichen umgehen können. Fortgeschrittene Perl-Nutzung wäre natürlich, wenn Sie irgendwann die Stärken der Sprache lernen würden.

Und für Neinsager in Bezug auf die Lesbarkeit: Sie können schwer lesbaren Code in jeder Sprache schreiben. Wenn Sie auf Ihren Code von vor 4 Monaten zurückblicken und ihn nicht verstehen können, machen Sie etwas falsch.

ps Dieser Beitrag wurde mit Links zu verschiedenen verwaltungsfreundlichen CPAN - Modulen gefüllt, aber anscheinend können neue Benutzer nur einen Link posten. Verwenden Sie diesen CPAN - Link, um nach Dingen wie "CVS", "SVN", "Cron" und "Moose" zu suchen umfangreiches Objektsystem)

jsoverson
quelle
1
  • Rubin
  • Python
  • Go - eine plattformübergreifende Sprache, Scripting wird als eine der Stärken von Go genannt .
  • Node.js - siehe Grunt.js, Gulp.js. Viele Projekte verwenden jetzt Node.js als Shell-Automatisierungstool.
  • Perl
Brian Jordan
quelle
1

[Allgemeine Hinweise zum Schreiben von Skripten finden Sie in den anderen Antworten.]

In dieser Antwort geht es um die Verwendung von Befehlszeilenprogrammen und auch großer Ketten von diesen.

Bash ist die einfachste Methode zum Ausführen von CLI-Programmketten und möglicherweise mehrerer Ketten nacheinander. Perl kann dasselbe tun, aber die Sprache ist viel schwieriger zu lernen und weitaus komplexer, und wie viele darauf hingewiesen haben, ist es einfach, verständliches Perl zu schreiben.

Wenn Sie Dateien und Parameter durchlaufen, ist es am einfachsten, mit bash loszulegen. Sie können Prototypen in der Shell erstellen, sie in ein Skript kopieren und einige Arrays und Schleifen mit minimalem Overhead hinzufügen.

Beispiele für das, was ich meine:

$ cat input.dat | numerical_model source_data ${SRC} grid_size ${GRID_SIZE} param1 ${P1} param2 ${P2} | tee ${OUTPUT} | plotter title ${TITLE} ylabel ${YLABEL} xlabel ${XLABEL} > ${OUTPUT_FIG}
$ cat ${OUTPUT} | stats_cmd bin_size ${BINSIZE} dist_type ${DIST_TYPE} | tee ${OUTPUT_STATS} | plotter plot_type ${PLOT_TYPE} title ${TITLE_STATS} > ${OUTPUT_FIG_STATS}

In Bash ist es einfach , einige dieser Parameter in ein paar Schleifen zu packen. Der Code ist jedoch schwer zu lesen, wenn das Skript mehr als einige zehn Zeilen umfasst. --- Stellen Sie sich 30 Befehlssätze (jeweils ein paar Zeilen) für 30 verschiedene Datenplots vor ---

Perl und Python sind möglicherweise besser für große Skripte geeignet, da sie eine sauberere Syntax für Schleifen und Variablen aufweisen. Die Bash-Befehle müssen jedoch als Zeichenfolgen generiert, als Unterprozesse ausgeführt und stdin, stdout erfasst werden. Dies ist möglich, kann jedoch die native Shell-Umgebung nicht vollständig ersetzen.

Wenn Muscheln eine bessere Sprache hätten, würde dies alles vermieden.

Romanautorpartei
quelle
0
  1. am häufigsten verwendet: Perl, meist aus historischen Gründen. Python ist in allen Linux- und BSD-Distributionen weit verbreitet (es ist sogar unter Mac OSX installiert) und ist weitaus besser zu lernen / zu programmieren. Sobald Sie die Syntax erhalten haben, ist Bash für fast alles, was Sie über die Befehlszeile tun können, einfacher. Immerhin, es ist die Kommandozeile.

    • C-Syntax: Es gibt csh , aber Sie können TCC einfach installieren und reales C als Skriptsprache verwenden, das aus dem Quellcode in kürzerer Zeit als beim Starten anderer Sprachen kompiliert wurde.

    • andere Skriptsprachen: viele! Lua , Ruby , JavaScript ...

Javier
quelle
0

Sie sollten eine Kombination von allen verwenden, wo es angebracht ist. Ich mag Perl (Lesbarkeit) wirklich nicht, aber es ist für viele Dinge gut. Python hingegen war etwas Neues für mich in Bezug auf die Systemadministration, bis ich einige KVM-Maschinen verwalten musste (und muss). Das Starten, Stoppen, Speichern, Laden und Migrieren all dieser Maschinen per Skript wurde nach einer Stunde des Herumspielens mit den Python-Bindungen von libvirt Realität.

Last but not least würde ich weder Perl noch Python verwenden, wenn ich beispielsweise jede Nacht alle Datenbanken von einem MySQL-Server sichern müsste (jede Datenbank in einer eigenen Sicherungsdatei), sie tarieren und diese mit einem anderen Server synchronisieren müsste. Warum ? Weil es schneller und einfacher ist, es in Bash zu schreiben :)

Am Ende sollten Sie die Sprache verwenden, die am besten zu Ihrer aktuellen Aufgabe passt, und nicht nur eine bestimmte Skriptsprache verwenden, nur weil es Ihnen am besten gefällt.

sh1ny
quelle
0

Ich mag Rubin. Es ist einfach und leicht zu programmieren. Es gibt ein ausgezeichnetes Buch über die Systemadministration mit Ruby .

Ruby wird in verschiedenen Konfigurationsmanagementsystemen (capistrano, chef, puppet) und in der letzten Version von metasploit verwendet.

Sie können Rush verwenden , einen Ersatz für die Unix-Shell mit Ruby-Syntax, und folgende Aktionen ausführen:

local = Rush::Box.new('localhost') 
remote = Rush::Box.new('my.remote.server.com')     
local_dir = local['/Users/adam/myproj/']
remote_dir = remote['/home/myproj/app/']

local_dir.copy_to remote_dir
remote_dir['**/.svn/'].each { |d| d.destroy }
chmeee
quelle
Danke chmeee. Ich hatte keine Ahnung, dass Sie Ruby für Sysadmin verwenden könnten - ich dachte immer, es sei web-zentriert. Ich suche nach etwas, das in den meisten Organisationen verwendet wird. Ist es fair zu sagen, dass Ruby für Sysadmin immer noch zu aktuell ist?
Scott Davies
1
Shell / Perl sind die einzigen zwei Sprachen, die Sie zuverlässig überall finden können. Python ist wahrscheinlich der zweithäufigste, wobei Rubin einen sehr entfernten vierten Platz einnimmt (tatsächlich wahrscheinlich den fünften hinter awk).
Cian
@ScottDavies PHP und ASP.net sind die einzigen webbasierten Sprachen, die ich kenne. Sogar Javascript, das ausschließlich für das Web entwickelt wurde, ist längst nicht mehr als Mangel an Formularvalidierung zu bezeichnen. Allerdings können Sie HTML mit jeder Sprache versenden, auch mit Bash .
ThorSummoner
0

Ruby Einzeiler Beispiel:

> echo 'Shell is the best!' | ruby -pe 'gsub("Shell", "Ruby")' 

Ruby is the best!

> printf "foo\nbar\nbaz\n" |  ruby -ne 'BEGIN { i = 1 }; puts "#{i} #{$_}"; i += 1'

1 foo
2 bar
3 baz

Ich würde Rubin verwenden.

Im Vergleich zu sh ist es modern und kraftvoll.

Im Vergleich zu Python handelt es sich um Konsistenz, eine Edition und einen Paketmanager. Und ich mag keine Einrückungssyntax.

Im Vergleich zu Perl, ein bisschen altmodisch und die Syntax ist mir zu komplex.

Jakob
quelle