Startseite » wie man » Das Handbuch für Anfänger zu Shell Scripting The Basics

    Das Handbuch für Anfänger zu Shell Scripting The Basics

    Der Begriff "Shell-Scripting" wird in Linux-Foren häufig erwähnt, aber viele Benutzer kennen ihn nicht. Durch das Erlernen dieser einfachen und leistungsfähigen Programmiermethode können Sie Zeit sparen, die Befehlszeile besser lernen und langwierige Dateiverwaltungsaufgaben vermeiden.

    Was ist Shell Scripting??

    Linux-Benutzer zu sein bedeutet, dass Sie mit der Befehlszeile herumspielen. Ob Sie es mögen oder nicht, es gibt nur einige Dinge, die über diese Schnittstelle viel einfacher erledigt werden können als durch Zeigen und Klicken. Je mehr Sie die Befehlszeile verwenden und lernen, desto mehr sehen Sie ihr Potenzial. Nun, die Befehlszeile selbst ist ein Programm: die Shell. Die meisten Linux-Distributionen verwenden heute Bash, und in diese Befehle geben Sie wirklich Befehle ein.

    Einige von Ihnen, die Windows vor der Verwendung von Linux verwendet haben, können sich an Batchdateien erinnern. Dies waren kleine Textdateien, die Sie mit Befehlen füllen konnten, die von Windows ausgeführt wurden. Es war eine clevere und ordentliche Methode, einige Dinge zu erledigen, z. B. das Ausführen von Spielen in Ihrem Computerlabor, wenn Sie keine Systemordner öffnen oder Verknüpfungen erstellen konnten. Batch-Dateien in Windows sind zwar nützlich, jedoch eine billige Imitation von Shell-Skripts.

    Shell-Skripte ermöglichen es uns, Befehle in Ketten zu programmieren und sie vom System als Skriptereignis wie Batch-Dateien ausführen zu lassen. Sie ermöglichen auch weitaus nützlichere Funktionen, z. B. die Befehlsersetzung. Sie können einen Befehl wie date aufrufen und dessen Ausgabe als Teil eines Dateinamensschemas verwenden. Sie können Sicherungen automatisieren, und für jede kopierte 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. Mit Scripting können Sie Programmierfunktionen wie "for" -Schleifen, if / then / else-Anweisungen usw. direkt in der Benutzeroberfläche Ihres Betriebssystems verwenden. Sie müssen keine andere Sprache lernen, weil Sie das verwenden, was Sie bereits wissen: die Befehlszeile.

    Ich denke, das ist wirklich die Kraft des Skripts. Sie können mit bereits bekannten Befehlen programmieren, während Sie die wichtigsten Programmiersprachen lernen. Müssen Sie etwas Wiederholtes und Mühseliges tun? Skript es! Benötigen Sie eine Abkürzung für einen wirklich komplizierten Befehl? Skript es! Möchten Sie eine wirklich benutzerfreundliche Befehlszeilenschnittstelle für etwas erstellen? Skript es!

    Bevor Sie beginnen

    Bevor wir mit unserer Skriptserie beginnen, wollen wir einige grundlegende Informationen behandeln. Wir werden die bash-Shell verwenden, die von den meisten Linux-Distributionen nativ verwendet wird. Bash ist auch für Mac OS-Benutzer und Cygwin unter Windows verfügbar. Da es so universell ist, sollten Sie unabhängig von Ihrer Plattform Skripte erstellen können. Solange alle Befehle vorhanden sind, auf die verwiesen wird, können Skripts auf mehreren Plattformen ausgeführt werden, wobei nur wenige oder gar keine Anpassungen erforderlich sind.

    Skripte können problemlos über Administrator- oder Superuser-Berechtigungen verfügen. Testen Sie daher die Skripts am besten, bevor Sie sie einsetzen. Nutzen Sie auch den gesunden Menschenverstand, beispielsweise um sicherzustellen, dass Sie Sicherungskopien der Dateien haben, für die Sie ein Skript ausführen. 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 sich die heruntergeladenen Skripts durch und seien Sie vorsichtig mit den Daten, die Sie haben, nur für den Fall, dass etwas schief läuft.

    Skripte sind im Grunde nur reine Textdateien. Sie können jeden Texteditor verwenden, um sie zu schreiben: gedit, emacs, vim, nano ... Diese Liste wird fortgesetzt. Speichern Sie es einfach als reinen Text, nicht als Rich Text oder als Word-Dokument. Da ich die Benutzerfreundlichkeit von Nano liebe, werde ich sie verwenden.

    Skriptberechtigungen und Namen

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

    chmod + x ~ / somecrazyfolder / script1

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

    chmod u + x ~ / somecrazyfolder / script1

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

    cd ~ / somecrazyfolder

    ./ script1

    Zur Vereinfachung können Sie Skripte in einem "bin" -Ordner in Ihrem Home-Verzeichnis ablegen:

    ~ / bin

    In vielen modernen Distributionen wird dieser Ordner nicht mehr standardmäßig erstellt, Sie können ihn jedoch erstellen. Hier werden normalerweise ausführbare Dateien gespeichert, die zu Ihrem Benutzer gehören und nicht zu anderen Benutzern. Indem Sie Skripts hier platzieren, können Sie sie einfach ausführen, indem Sie ihren Namen wie andere Befehle eingeben, anstatt dass Sie mit dem Präfix './' herumgehen müssen.

    Bevor Sie ein Skript benennen, sollten Sie jedoch den folgenden Befehl verwenden, um zu überprüfen, ob ein Programm installiert ist, das diesen Namen verwendet:

    welche [befehl]

    Viele Leute nennen ihre frühen Skripte „test“ und wenn sie versuchen, es in der Befehlszeile auszuführen, passiert nichts. Dies liegt daran, dass es mit dem Testbefehl in Konflikt steht, der ohne Argumente nichts ausrichtet. Stellen Sie immer sicher, dass Ihre Skriptnamen nicht mit Befehlen in Konflikt stehen, anderenfalls könnten Sie Dinge tun, die Sie nicht tun möchten!

    Skript-Richtlinien

    Wie ich bereits erwähnt habe, besteht jede Skriptdatei im Wesentlichen aus reinem Text. Das bedeutet jedoch nicht, dass Sie schreiben können, was Sie wollen oder nicht. Wenn versucht wird, eine Textdatei auszuführen, werden sie von Muscheln nach Hinweisen darauf durchsucht, ob sie Skripts sind oder nicht, und wie alles richtig behandelt wird. Aus diesem Grund gibt es einige Richtlinien, die Sie kennen müssen.

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

    Der Hash-Bang-Hack

    Wenn eine Shell eine Textdatei analysiert, können Sie die Datei direkt als Skript identifizieren, indem Sie Ihre erste Zeile festlegen:

    #! / bin / bash

    Wenn Sie eine andere Shell verwenden, ersetzen Sie hier den Pfad. Kommentarzeilen beginnen mit Hashes (#), aber das Hinzufügen des Bang (!) Und des Shell-Pfads ist eine Art Hack, der diese Kommentarregel umgeht und die Ausführung des Skripts mit der Shell erzwingt, auf die diese Zeile zeigt.

    Neue Zeile = Neuer Befehl

    Jede neue Zeile sollte als neuer Befehl oder Bestandteil eines größeren Systems betrachtet werden. Wenn / then / else-Anweisungen zum Beispiel mehrere Zeilen übernehmen, aber jede Komponente dieses Systems befindet sich in einer neuen Zeile. Lassen Sie nicht zu, dass ein Befehl in die nächste Zeile übergeht, da dies den vorherigen Befehl abschneiden und in der nächsten Zeile einen Fehler anzeigen kann. Wenn Ihr Texteditor dies tut, sollten Sie das Text-Wrapping deaktivieren, um auf der sicheren Seite zu sein. Sie können den Textumbruch im Nano-Bit deaktivieren, indem Sie ALT + L drücken.

    Kommentar Oft mit #s

    Wenn Sie eine Zeile mit einem # beginnen, wird die Zeile ignoriert. Daraus wird eine Kommentarzeile, in der Sie sich daran erinnern können, was die Ausgabe des vorherigen Befehls war oder was der nächste Befehl bewirkt. Deaktivieren Sie erneut den Textumbruch oder teilen Sie Ihren Kommentar in mehrere Zeilen auf, die alle mit einem Hash beginnen. Die Verwendung vieler Kommentare ist eine bewährte Methode, da Sie und andere Benutzer Ihre Skripte leichter anpassen können. Die einzige Ausnahme ist der bereits erwähnte Hash-Bang-Hack, also folgt # nicht mit! S. ;-)

    Befehle sind von Klammern umgeben

    In älteren Tagen wurden Befehlssubstitutionen mit einzelnen Häkchen (', teilt die ~ -Taste) ausgeführt. Wir werden dies noch nicht ansprechen, aber da die meisten Leute nach dem Erlernen der Grundlagen nachgehen, ist es wahrscheinlich eine gute Idee zu erwähnen, dass Sie stattdessen Klammern verwenden sollten. Dies liegt vor allem daran, dass beim Schachteln - Einfügen von Befehlen in andere Befehle - Klammern besser funktionieren.

    Dein 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 zunächst prüfen, ob dieser Name mit einem Konflikt in Konflikt steht:

    Sie können sehen, dass es keine Ausgabe des Befehls which gibt. Wir verwenden also diesen Namen.

    Erstellen wir eine leere Datei im Ordner ~ / bin:

    Berühren Sie ~ / bin / datecp

    Und lasst uns jetzt die Erlaubnis ändern, bevor wir vergessen:

    Beginnen wir damit, unser Skript zu erstellen. Öffnen Sie diese Datei in Ihrem Texteditor Ihrer Wahl. Wie gesagt, ich mag die Einfachheit von Nano.

    nano ~ / bin / datecp

    Und lasst uns fortfahren und die erste Zeile mit den Voraussetzungen und einen Kommentar dazu einfügen, 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 ermöglicht es uns, Informationen zu speichern und damit Dinge zu tun. Variablen können „erweitert“ werden, wenn sie an anderer Stelle referenziert werden. Das heißt, anstatt ihren Namen anzuzeigen, zeigen sie ihren gespeicherten Inhalt an. Sie können dieser Variablen später mitteilen, dass sie andere Informationen speichern soll. Alle darauf folgenden Anweisungen verwenden die neuen Informationen. Es ist ein wirklich schicker Platzhalter.

    Was werden wir variabel einfügen? Nun, speichern wir Datum und Uhrzeit! Dazu rufen wir den Date-Befehl auf.

    Sehen Sie sich den Screenshot unten an, um zu erfahren, wie Sie die Ausgabe des Date-Befehls erstellen können:

    Sie können sehen, dass Sie durch Hinzufügen verschiedener Variablen, die mit% beginnen, die Ausgabe des Befehls in das ändern können, was Sie möchten. Weitere Informationen finden Sie auf der Manpage zum Befehl date.

    Verwenden wir die letzte Wiederholung des Date-Befehls "Datum +% m_% d_% y-% H.% M.% S" und verwenden Sie dies 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 Date-Befehls geben, wie wir es erwarten würden:

    Aber lass uns etwas anderes machen. Geben Sie einen Variablennamen an, wie zum Beispiel date_formatted für diesen Befehl. Die richtige Syntax dafür lautet wie folgt:

    Variable = $ (Befehlsoptionsargumente)

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

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

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

    Hier ist ein Beispielskript und seine Ausgabe:

    Beachten Sie, dass die Ausgabe zwei Leerzeichen enthält. Das Leerzeichen in den Anführungszeichen des Echobefehls und das Leerzeichen vor der Variablen werden angezeigt. Verwenden Sie keine Leerzeichen, wenn Sie nicht möchten, dass sie angezeigt werden. Beachten Sie auch, dass das Skript ohne diese hinzugefügte "Echo" -Zeile absolut keine Ausgabe ergibt.

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

    cp -iv $ 1 $ 2. $ date_formatted

    Dadurch wird der Kopierbefehl mit den Optionen -i und -v aufgerufen. Beim ersteren werden Sie zur Bestätigung aufgefordert, bevor Sie eine Datei überschreiben. Bei letzterem wird in der Befehlszeile angezeigt, was gerade läuft.

    Als Nächstes können Sie sehen, dass ich die Option "$ 1" hinzugefügt habe. Bei der Skripterstellung kennzeichnet ein Dollarzeichen ($), gefolgt von einer Zahl, dieses 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"..

    Wenn wir auf unser Skript zurückblicken, können wir feststellen, dass wir zwei Argumente referenzieren:

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

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

    Folgendes passiert, wenn das Skript ausgeführt wird:

    Sie können sehen, dass die Ausgabedatei als das aufgelistet ist, was ich für $ 2 eingegeben habe, gefolgt von einem Punkt und der Ausgabe des Datumsbefehls! Macht Sinn, richtig?

    Wenn ich nun den Befehl datecp ausführt, wird dieses Skript ausgeführt, und ich kann jede Datei an einen neuen Speicherort kopieren und automatisch Datum und Uhrzeit bis zum Ende des Dateinamens hinzufügen. Nützlich für die Archivierung!


    Shell-Scripting ist der Kern Ihres Betriebssystems. Sie müssen auch keine neue Programmiersprache lernen, um dies zu ermöglichen. Versuchen Sie, mit einigen grundlegenden Befehlen zu Hause Skripts zu erstellen, und überlegen Sie, für was Sie dies tun können.

    Hast du ein Skript? Hast du einen Rat für Neulinge? Teilen Sie Ihre Gedanken in den Kommentaren mit! Es gibt noch mehr in dieser Serie!