23Aug

Der Anfängerleitfaden zu Shell Scripting: Die Grundlagen

Der Begriff "Shell Scripting" wird in Linux-Foren oft erwähnt, aber vielen Anwendern ist er nicht bekannt. Wenn Sie diese einfache und leistungsfähige Programmiermethode erlernen, können Sie Zeit sparen, die Befehlszeile besser erlernen und langwierige Dateiverwaltungsaufgaben verbannen.

Was ist Shell Scripting?

Als Linux-Benutzer müssen Sie mit der Befehlszeile umgehen. Ob es Ihnen gefällt oder nicht, es gibt nur einige Dinge, die viel einfacher über diese Schnittstelle erledigt werden als durch Zeigen und Klicken. Je mehr Sie die Befehlszeile verwenden und lernen, desto mehr sehen Sie ihr Potenzial. Nun, die Kommandozeile selbst ist ein Programm: die Shell. Die meisten Linux-Distributionen verwenden heute Bash, und das ist es, in das Sie wirklich Befehle eingeben.

Einige von Ihnen, die Windows vor der Verwendung von Linux verwendet haben, erinnern sich möglicherweise an Batch-Dateien. Dies waren kleine Textdateien, die Sie mit auszuführenden Befehlen füllen konnten, und Windows würde sie nacheinander ausführen. Es war eine clevere und nette Methode, um einige Dinge zu erledigen, wie zum Beispiel Spiele in Ihrem Computerlabor in der High School, wenn Sie keine Systemordner öffnen oder Verknüpfungen erstellen konnten. Batch-Dateien in Windows, obwohl nützlich, sind eine billige Nachahmung von Shell-Skripten.

Shell-Skripte ermöglichen es uns, Befehle in Ketten zu programmieren und sie vom System als Skript-Ereignis auszuführen, genau wie Batch-Dateien. Sie ermöglichen auch wesentlich nützlichere Funktionen wie die Befehlsersetzung. Sie können einen Befehl wie das Datum aufrufen und dessen Ausgabe als Teil eines Dateibenennungsschemas verwenden. Sie können Sicherungen automatisieren, und bei jeder kopierten Datei kann das aktuelle Datum an das Ende des Namens angehängt werden. Skripte sind nicht nur Aufrufe von Befehlen. Sie sind Programme für sich. Scripting ermöglicht es Ihnen, Programmierfunktionen - wie etwa "for" -Schleifen, /then/ else-Anweisungen usw. - direkt in der Benutzeroberfläche Ihres Betriebssystems zu verwenden. Und Sie müssen keine andere Sprache lernen, weil Sie das verwenden, was Sie bereits wissen: die Befehlszeile.

Das ist wirklich die Macht des Skripts, denke ich. Sie können mit bereits bekannten Befehlen programmieren und dabei die wichtigsten Programmiersprachen lernen. Müssen Sie etwas Wiederholendes und Langweiliges tun? Schreib es! Brauchen Sie eine Abkürzung für einen wirklich komplizierten Befehl? Schreib es! Möchten Sie eine wirklich einfach zu verwendende Befehlszeilenschnittstelle für etwas erstellen? Schreib es!

Bevor Sie mit der

beginnen Bevor wir mit der Skripterstellung beginnen, wollen wir einige grundlegende Informationen behandeln. Wir werden die Bash-Shell verwenden, die die meisten Linux-Distributionen nativ verwenden. Bash ist für Mac OS Benutzer und Cygwin auch für Windows verfügbar. Da es so universell ist, sollten Sie unabhängig von Ihrer Plattform skripten können. Solange alle Befehle, auf die verwiesen wird, vorhanden sind, können Skripts auf mehreren Plattformen ausgeführt werden, ohne dass eine Feinabstimmung erforderlich ist.

Scripting kann leicht die Privilegien "Administrator" oder "Superuser" nutzen, also testen Sie Skripte am besten, bevor Sie sie einsetzen. Verwenden Sie auch den gesunden Menschenverstand, z. B. um Sicherungskopien der Dateien zu erstellen, auf denen Sie ein Skript ausführen möchten. Es ist auch sehr wichtig, die richtigen Optionen wie -i für den Befehl rm zu verwenden, damit Ihre Interaktion erforderlich ist. Dies kann einige böse Fehler verhindern. Lesen Sie daher die heruntergeladenen Skripte durch und seien Sie vorsichtig mit den Daten, die Sie haben, nur für den Fall, dass etwas schief läuft.

Skripte sind im Kern reine Textdateien. Sie können jeden Texteditor verwenden, um sie zu schreiben: gedit, emacs, vim, nano. .. Diese Liste geht weiter. Stellen Sie sicher, dass Sie es als Nur-Text, nicht als Rich-Text oder als Word-Dokument speichern. Da ich die Benutzerfreundlichkeit, die nano bietet, sehr schätze, werde ich das verwenden.

-Skriptberechtigungen und -namen

-Skripts werden wie Programme ausgeführt, und damit dies geschieht, müssen sie über die erforderlichen Berechtigungen verfügen. Sie können Skripte ausführbar machen, indem Sie den folgenden Befehl ausführen:

chmod + x ~ /somecrazyfolder/ script1

Damit kann jeder dieses bestimmte Skript ausführen. Wenn Sie die Verwendung auf Ihren Benutzer beschränken möchten, können Sie stattdessen Folgendes verwenden:

chmod u + x ~ /somecrazyfolder/ script1

Um dieses Skript auszuführen, müssten Sie in das richtige Verzeichnis wechseln und das Skript dann wie folgt ausführen:

cd ~ / somecrazyfolder

. /script1

Um die Dinge bequemer zu machen, können Sie Skripte in einen Ordner "bin" in Ihrem Home-Verzeichnis:

~ / bin

In vielen modernen Distributionen wird dieser Ordner nicht mehr standardmäßig erstellt, Sie können ihn jedoch erstellen. In der Regel werden ausführbare Dateien gespeichert, die zu Ihrem Benutzer und nicht zu anderen Benutzern gehören. Wenn Sie hier Skripte platzieren, können Sie sie einfach ausführen, indem Sie wie bei anderen Befehlen ihren Namen eingeben, anstatt herumzuspielen und das Präfix "./" zu verwenden.

Bevor Sie jedoch ein Skript benennen, sollten Sie den folgenden Befehl ausführen, um zu prüfen, ob Sie ein Programm installiert haben, das diesen Namen verwendet:

Viele [

] nennen ihre frühen Skripts "test" und wenn sie es versuchenFühren Sie es in der Befehlszeile aus, nichts passiert. Dies liegt daran, dass es mit dem Testbefehl kollidiert, der ohne Argumente nichts tut. Stellen Sie immer sicher, dass Ihre Skriptnamen nicht in Konflikt mit Befehlen stehen, sonst können Sie Dinge tun, die Sie nicht beabsichtigen zu tun!

Scripting Guidelines

Wie bereits erwähnt, ist jede Skriptdatei im Wesentlichen reiner Text. Das bedeutet nicht, dass Sie schreiben können, was Sie wollen, aber alles willy-nilly, obwohl. Wenn versucht wird, eine Textdatei auszuführen, durchforsten Shells diese nach Hinweisen, ob es sich um Skripte handelt oder nicht, und um alles richtig zu handhaben. Aus diesem Grund gibt es ein paar Richtlinien, die Sie wissen müssen.

  1. Jedes Skript sollte mit "#!/bin/ bash "
  2. Jede neue Zeile ist ein neuer Befehl
  3. Kommentarzeilen beginnen mit einem #
  4. Befehle werden von() umgeben

Der Hash-Bang-Hack

Wenn eine Shell eine Textdatei durchsucht, ist der direkteste Weg, die Datei zu identifizierenEin Skript ist, indem Sie Ihre erste Zeile machen:

#!/bin/ Bash

Wenn Sie eine andere Shell verwenden, ersetzen Sie ihren Pfad hier. Kommentarzeilen beginnen mit Hashes( #), fügen aber den Bang( !) Und den Shell-Pfad nach einer Art Hack hinzu, der diese Kommentarregel umgeht und das Skript zur Ausführung mit der Shell führt, auf die diese Zeile zeigt.

Neue Zeile = Neuer Befehl

Jede neue Zeile sollte als neuer Befehl oder als Komponente eines größeren Systems betrachtet werden. Wenn /then/ else-Anweisungen beispielsweise mehrere Zeilen übernehmen, befindet sich jedoch jede Komponente dieses Systems in einer neuen Zeile. Lassen Sie einen Befehl nicht in die nächste Zeile bluten, da dies den vorherigen Befehl abschneiden und Ihnen in der nächsten Zeile einen Fehler geben kann. Wenn Ihr Texteditor das tut, sollten Sie den Textumbruch deaktivieren, um auf der sicheren Seite zu sein. Sie können den Textumbruch im Nano-Bit mit ALT + L abschalten.

Kommentar Oft mit #s

Wenn Sie eine Zeile mit einem # beginnen, wird die Zeile ignoriert. Dies verwandelt es in eine Kommentarzeile, in der Sie sich selbst daran erinnern können, was die Ausgabe des vorherigen Befehls war oder was der nächste Befehl tun wird. Deaktivieren Sie den Zeilenumbruch oder brechen Sie den Kommentar in mehrere Zeilen auf, die alle mit einem Hash beginnen. Es ist eine gute Übung, viele Kommentare zu verwenden, da Sie und andere Ihre Skripte einfacher anpassen können. Die einzige Ausnahme ist der oben erwähnte Hash-Bang-Hack, also folge nicht #s mit! S.;-)

Befehle sind von Klammern umgeben

Früher wurden Befehlssubstitutionen mit einzelnen Teilstrichen ausgeführt( `, teilt die ~ Taste).Wir werden das noch nicht anfassen, aber da die meisten Leute nach dem Erlernen der Grundlagen loslegen und es erforschen, ist es wahrscheinlich eine gute Idee zu erwähnen, dass Sie stattdessen Klammern verwenden sollten. Dies liegt hauptsächlich daran, dass beim Einfügen von Befehlen in andere Befehle die Klammern besser funktionieren.

Ihr erstes Skript

Beginnen wir mit einem einfachen Skript, mit dem Sie Dateien kopieren und Daten an das Ende des Dateinamens anhängen können. Nennen wir es "datecp".Lassen Sie uns zuerst prüfen, ob dieser Name mit etwas in Konflikt steht:

Sie können sehen, dass es keine Ausgabe des entsprechenden Befehls gibt. Daher sind wir alle so eingestellt, dass dieser Name verwendet wird.

Lassen Sie uns eine leere Datei im ~ / bin-Ordner erstellen:

touch ~ /bin/ datecp

Und jetzt ändern wir die Berechtigung, bevor wir vergessen:

Beginnen wir mit dem Erstellen unseres Skripts.Öffnen Sie diese Datei in Ihrem bevorzugten Texteditor. Wie ich schon sagte, ich mag die Einfachheit von Nano.

nano ~ /bin/ datecp

Und, gehen wir voran und geben Sie die erste Zeile und einen Kommentar dazu ein, was dieses Skript macht.

Als nächstes deklarieren wir eine Variable. Wenn Sie jemals Algebra genommen haben, wissen Sie wahrscheinlich, was das ist. Eine Variable erlaubt uns, Informationen zu speichern und Dinge damit zu tun. Variablen können "erweitert" werden, wenn sie an anderer Stelle referenziert werden. Das heißt, anstatt ihren Namen anzuzeigen, werden sie ihre gespeicherten Inhalte anzeigen. Sie können später dieselbe Variable angeben, um andere Informationen zu speichern, und alle Anweisungen, die danach ausgeführt werden, verwenden die neuen Informationen. Es ist ein wirklich schicker Platzhalter.

Was werden wir aus Variable herausholen? Nun, lass uns Datum und Uhrzeit speichern! Um dies zu tun, rufen wir den Befehl date auf.

Sehen Sie sich den folgenden Screenshot an, um die Ausgabe des Datumsbefehls zu erstellen:

Sie können sehen, dass Sie die Ausgabe des Befehls ändern können, indem Sie verschiedene Variablen hinzufügen, die mit% beginnen. Weitere Informationen finden Sie auf der Handbuchseite für den Befehl date.

Verwenden wir die letzte Iteration des Datumsbefehls "Datum +% m_% d_% y-% H.% M.% S" und verwenden Sie diese in unserem Skript.

Wenn wir dieses Skript jetzt speichern würden, könnten wir es ausführen und es würde uns die Ausgabe des Datumsbefehls geben, wie wir es erwarten würden:

Aber lass uns etwas anderes machen. Lassen Sie uns einen Variablennamen geben, wie date_formated für diesen Befehl. Die richtige Syntax dafür lautet wie folgt:

Variable = $( Befehl-Optionen Argumente)

Und für uns würden wir es so bauen:

date_formatted = $( Datum +% m_% d_% y-% H.%M.% S)

Dies nennen wir Befehlssubstitution. Wir sagen im Wesentlichen bash, dass, wenn die Variable "date_formatted" auftaucht, der Befehl innerhalb der Klammern ausgeführt wird. Dann sollte die Ausgabe der Befehle anstelle des Namens der Variablen "date_formatted" angezeigt werden.

Hier ein Beispielskript und seine Ausgabe:

Beachten Sie, dass in der Ausgabe zwei Leerzeichen enthalten sind. Der Raum innerhalb der Anführungszeichen des Befehls echo und das Leerzeichen vor der Variablen werden angezeigt. Verwenden Sie keine Leerzeichen, wenn Sie nicht angezeigt werden sollen. Beachten Sie auch, dass ohne diese hinzugefügte "echo" -Zeile das Skript absolut keine Ausgabe geben würde.

Kommen wir zurück zu unserem Skript. Als nächstes fügen wir den kopierenden Teil des Befehls hinzu.

cp -iv $ 1 $ 2. $ date_formatted

Dadurch wird der Befehl copy mit den Optionen -i und -v aufgerufen. Der erste Befehl fordert Sie zur Überprüfung auf, bevor Sie eine Datei überschreiben, und der zweite zeigt an, was sich in der Befehlszeile befindet.

Als Nächstes können Sie sehen, dass ich die Option "$ 1" hinzugefügt habe. Beim Scripting bezeichnet ein Dollarzeichen( $) gefolgt von einer Zahl das nummerierte Argument des Skripts, wenn es aufgerufen wurde. Zum Beispiel im folgenden Befehl:

cp -iv Trogdor2.mp3 Klingelton.mp3

Das erste Argument ist "Trogdor2.mp3" und das zweite Argument ist "ringtone.mp3".

Im Rückblick auf unser Skript können wir sehen, dass wir auf zwei Argumente verweisen:

Dies bedeutet, dass wir beim Ausführen des Skripts zwei Argumente angeben müssen, damit das Skript korrekt ausgeführt wird. Das erste Argument, $ 1, ist die Datei, die kopiert wird und als erstes Argument des "cp -iv" -Befehls verwendet wird.

Das zweite Argument $ 2 fungiert als Ausgabedatei für denselben Befehl. Aber Sie können auch sehen, dass es anders ist. Wir haben einen Punkt hinzugefügt und auf die Variable "date_formatted" von oben verwiesen. Neugierig was das bewirkt?

Folgendes passiert, wenn das Skript ausgeführt wird:

Sie können sehen, dass die Ausgabedatei so angezeigt wird, wie auch immer ich für $ 2 eingegeben habe, gefolgt von einem Punkt und dann der Ausgabe des Datumsbefehls! Macht Sinn, oder?

Wenn ich jetzt den Befehl datecp ausführe, wird dieses Skript ausgeführt und ich kann jede Datei an einen neuen Speicherort kopieren und automatisch das Datum und die Uhrzeit am Ende des Dateinamens hinzufügen. Nützlich zum Archivieren!

Shell-Skripting ist das Herzstück dafür, dass Ihr Betriebssystem für Sie arbeitet. Sie müssen auch keine neue Programmiersprache lernen, um dies zu ermöglichen. Versuchen Sie zu Hause mit einigen grundlegenden Befehlen zu scripten und denken Sie darüber nach, wofür Sie das verwenden können.

Schreibst du? Haben Sie einen Rat für Neulinge? Teile deine Gedanken in den Kommentaren! Es gibt noch mehr in dieser Serie!