In diesem Tutorial erfahren Sie, wie Sie ganz einfach Ihre eigenen Bash-Skripte unter Linux schreiben können.

Als Systemadministrator ist es sehr wahrscheinlich, dass Sie sich wiederholende Aufgaben ausführen, die automatisiert werden könnten.

Glücklicherweise gibt es eine Programmiersprache, die unter Linux verwendet werden kann, um Skripte zu schreiben: die Bash-Programmiersprache.

Mit Bash können Sie komplette Systemsicherungen planen, indem Sie so viele Befehle wie gewünscht in Bash-Skripten angeben.

Sie können auch benutzerdefinierte Skripte haben, die Benutzer erstellen und löschen und ihre zugehörigen Dateien entfernen.

Mit der Bash können Sie auch Skripte laufen lassen, die nützliche Leistungsdaten in eine Datei oder eine Datenbank schreiben.

Die Bash ist eine sehr mächtige Programmiersprache für Systemadministratoren.

Im heutigen Tutorial werden wir alle Grundlagen lernen, die es über die Bash zu wissen gibt: wie man Skripte erstellt und ausführt, wie man Variablen und Shell-Build-Ins effektiv nutzt.

Inhaltsverzeichnis

Was Sie lernen werden

Wenn Sie dieses Tutorial bis zum Ende lesen, werden Sie die folgenden Konzepte der Bash kennenlernen

  • Wie man Bash-Skripte über die Kommandozeile erstellt und ausführt;
  • Was Shebang ist und wie es von Linux für Skripte verwendet wird;
  • Was Shell-Built-Ins sind und wie sie sich von regulären Systemprogrammen unterscheiden;
  • Wie man Bash-Variablen verwendet und was spezielle Variablen sind;
  • Wie man Bash-Befehlssubstitution verwendet;
  • Wie man einfache IF-Anweisungen in der Bash verwendet;

Wie Sie sehen, ist dies ein ziemlich langes Programm, also lassen Sie uns ohne weiteres damit beginnen, zu sehen, wie Sie Bash-Skripte erstellen und ausführen können.

Einstieg in die Bash

Bevor Sie irgendwelche Befehle eingeben, lassen Sie uns ein kurzes Wort über die Bash und die allgemeine Geschichte der Shell verlieren.

Geschichte der Bash

Die erste Version der Bash-Shell wurde 1989 von Brian Fox veröffentlicht und ist eine Open-Source-Implementierung der Unix-Shell.

Als damals Unix-Systeme entstanden, benutzten diese Systeme Standard-Unix-Shells namens Bourne-Shells.

Bild aus LinuxJournal

In den frühen Tagen von Unix waren Systeme, die von Firmen wie dem MIT oder Bell Labs entwickelt wurden, nicht frei und sie waren nicht quelloffen.

Auch wenn es für diese Tools eine Dokumentation gab, wurde es für die GNU-Initiative (unter der Leitung von Richard Stallman) eine Priorität, eine eigene Version der Unix-Shell zu haben.

Sechs Jahre nach der Ankündigung des GNU-Projekts wurde die Bash (Bourne-Again Shell) Shell geboren, die sogar noch mehr Funktionen hat als die ursprüngliche Bourne-Shell.

Bash-Programmiersprache

Wenn man mit einem Unix-ähnlichen System wie Linux arbeitet, hat Bash normalerweise zwei Bedeutungen:

  • Bash ist ein Kommandozeileninterpreter oder mit anderen Worten eine Unix-Shell. Das bedeutet, dass Sie immer, wenn Sie ein Terminal öffnen, eine Unix-Shell vor sich haben, die meistens eine Bash-Shell ist.

Wenn Sie Befehle direkt in das Terminal eingeben, werden die Befehle von der Shell interpretiert, mit Hilfe von Systemaufrufen ausgeführt und die Rückgabewerte werden an den Endbenutzer zurückgegeben.

Wenn Sie sich nicht sicher sind, welchen Interpreter Sie gerade verwenden, zeigt die Umgebungsvariable SHELL an, welche Shell Sie gerade benutzen.

$ printenv SHELL

Wie Sie sehen, arbeiten wir in diesem Fall korrekt mit dem Befehlsinterpreter Bash.

Es ist wichtig zu beachten, dass, auch wenn Begriffe wie „Bash-Skripting“ und „Shell-Skripting“ austauschbar verwendet werden, sie je nach Distribution nicht unbedingt das Gleiche beschreiben.

Einige neuere Distributionen (wie Debian 10) haben symbolische Links von der ursprünglichen Bourne-Shell (namens sh) zu ihren eigenen Shell-Implementierungen (in diesem Fall Dash oder Debian Almquist Shell)

  • Bash beschreibt ebenfalls eine Kommandozeilensprache und wird auch als die Bash-Sprache bezeichnet. Bash stellt eine Reihe von Operatoren und Operanden zur Verfügung, die verwendet werden können, um einige grundlegende Funktionen wie Piping oder die gleichzeitige Ausführung mehrerer Befehle zu ermöglichen.

Beim Ausführen einiger grundlegender Piping-Befehle sind Sie es gewohnt, mit dem Symbol „|“ zu arbeiten. Dieses Symbol ist Teil der Bash-Kommandozeilensprache.

Die gleiche Logik gilt für das „&&“-Symbol, das den zweiten Befehl ausführt, wenn, und nur wenn, der erste Befehl erfolgreich war.

$ command1 && command2

Bash-Skripte erstellen und ausführen

Nachdem Sie nun etwas Hintergrundwissen über die Bash-Shell und die Bash-Kommandozeilensprache haben, lassen Sie uns mit der Erstellung und Ausführung einfacher Bash-Skripte beginnen.

Um Ihr erstes Bash-Skript zu erstellen, erstellen Sie einfach eine Datei mit dem Namen „script.sh“.

Wie Sie wahrscheinlich schon bemerkt haben, verwenden wir immer noch die Erweiterung „sh“, die sich auf die ursprüngliche Bourne-Shell bezieht (auch als sh bezeichnet).

$ touch script.sh

Eine Datei mit der Endung „sh“ zu erstellen, reicht nicht aus, damit Ihr Skript als Shell-Skript angesehen wird.

Sie können tatsächlich sehen, dass Ihre Datei noch nicht als Shell-Skript angesehen wird, indem Sie den Datei-Befehl ausführen.

$ file script.sh

Wie Sie hier sehen können, wird Ihre Datei nur als eine einfache leere Datei beschrieben.

Damit Ihre Datei als Shell-Skript-Datei bezeichnet werden kann, müssen Sie die shebang-Zeile am Anfang Ihrer Datei angeben.

Shell mit shebang spezifizieren

Wenn Sie Linux schon länger benutzen, ist es sehr wahrscheinlich, dass Ihnen die shebang-Zeile am Anfang Ihrer Datei schon einmal begegnet ist.

Shebang, kurz für „Hash + „Bang“, ist ein Einzeiler, der an den Anfang von Shell-Skripten gesetzt wird, um anzugeben, welche Shell zur Interpretation dieses Skripts verwendet werden soll.

#!/bin/<shell>

In unserem Fall wollen wir mit Bash-Skripten arbeiten. Mit anderen Worten, wir wollen, dass unsere Skripte von einem Bash-Interpreter interpretiert werden.

Um den Pfad zum Interpreter zu bestimmen, können Sie den Befehl „which“ verwenden.

$ which bash/bin/bash

Nun, da Sie den Pfad zu Ihrem Interpreter kennen, bearbeiten Sie Ihre Skriptdatei und fügen Sie die Shebang-Zeile am Anfang Ihrer Datei ein.

#!/bin/bash

Nachdem Sie diese Zeile am Anfang Ihrer Datei hinzugefügt haben, führen Sie den „file“-Befehl erneut aus, um den Unterschied zu sehen.

Wie Sie sehen können, ist die Ausgabe etwas anders: Diesmal wird Ihr Skript als „Bourne-Again-Shell-Skript“ und, was noch wichtiger ist, als eine ausführbare Datei angesehen.

Was würde passieren, wenn Sie die shebang-Zeile am Anfang des Skripts nicht angeben würden?

Wenn Sie die shebang-Zeile nicht angeben, wird das Skript mit der aktuellen Shell ausgeführt, die zum Starten des Ausführungsbefehls verwendet wird.

Nun, da Sie wissen, wie man Bash-Skripte erstellt, lassen Sie uns sehen, wie Sie sie ausführen können.

Bash-Skripte ausführen

Um Bash-Skripte unter Linux auszuführen, haben Sie im Wesentlichen zwei Möglichkeiten:

  • Durch Angabe des Shell-Interpreters, den Sie verwenden möchten, und der Skriptdatei;
  • Durch Verwendung des Pfades zur Skriptdatei

Angabe des Shell-Interpreters

Die erste Methode ist ziemlich einfach.

Um Ihr Bash-Skript auszuführen, geben Sie den Interpreter an, den Sie selbst verwenden möchten.

$ bash <script>$ /bin/bash <script>

Bei dem Beispiel, das wir zuvor verwendet haben, würde dies die folgende Ausgabe ergeben.

Wie Sie sehen können, erfordert diese Methode nicht einmal die Ausführungsrechte für die Datei, Sie müssen nur in der Lage sein, die ausführbare Bash-Datei zu verwenden.

Wie Sie sehen, kann ich dieses Skript auch dann ausführen, wenn ich als ein anderer Benutzer ohne Ausführungsrechte angemeldet bin.

Dies ist ein wichtiger Hinweis, weil Sie Ihre Skriptdateien vielleicht in geschützten Verzeichnissen (auf die nur Sie zugreifen können) speichern möchten, um zu verhindern, dass andere Benutzer Ihre Dateien ausführen.

Pfad zum Skript angeben

Die andere Möglichkeit, Bash-Skripte auszuführen, besteht darin, den Pfad zur Datei anzugeben.

Um diese Methode zu verwenden, muss die Datei Ausführungsrechte haben.

Zunächst verwenden Sie den Befehl „chmod“, um Ausführungsrechte für den aktuellen Benutzer zu setzen.

$ chmod u+x <script>

Wie Sie sehen können, ist die Farbe der Datei ganz anders: Ihr aktuelles Terminal hebt ausführbare Dateien mit bestimmten Farben hervor, in diesem Fall mit der Farbe Grün.

Nun, da Ihr Skript ausführbar ist, können Sie es ausführen, indem Sie den relativen oder absoluten Pfad zum Skript angeben.

Bei einer Datei mit dem Namen „script.sh“, die sich in meinem aktuellen Arbeitsverzeichnis befindet, kann das Skript ausgeführt werden, indem man

$ ./script.sh

Wenn Sie sich in einem anderen Verzeichnis befinden, müssen Sie den absoluten Pfad zur Skriptdatei angeben.

$ /home/user/script.sh

Wie Sie wahrscheinlich schon gemerkt haben, ist diese Methode nicht sehr bequem, wenn Sie jedes Mal den Pfad zum Skript angeben müssen.

Zum Glück gibt es eine Möglichkeit, Ihr Skript auszuführen, indem Sie einfach den Dateinamen in die Befehlszeile eingeben.

Hinzufügen des Skripts zu PATH

Die „.sh“-Erweiterung ist nicht erforderlich, damit ein Skript als Skriptdatei gilt.

Der Einfachheit halber benennen wir die bestehende Datei „script.sh“ in „script“ umbenennen.

Um Dateien unter Linux umzubenennen, verwenden Sie einfach den Befehl „mv“ und geben das Quell- und das Zielverzeichnis an.

$ mv script.sh script

Was wäre nun, wenn Sie Ihr Skript durch Eingabe von „script“ ausführen wollten?

Dazu müssen Sie den Pfad zu Ihrem Skript zu Ihrer PATH-Umgebungsvariablen hinzufügen.

Um den aktuellen Wert Ihrer PATH-Umgebungsvariablen auszugeben, verwenden Sie „printenv“ mit dem Argument „PATH“.

$ printenv PATH

Um den PATH in Ihrer aktuellen Arbeitsumgebung zu aktualisieren, bearbeiten Sie die PATH-Umgebungsvariable mit der folgenden Syntax.

$ export PATH="<path_to_script>:$PATH"

Jetzt ist der soeben definierte „script“-Befehl direkt verfügbar, ohne dass irgendwelche Pfade angegeben werden müssen: Sie können ihn wie jeden anderen Befehl starten.

Hinweis : Wenn Sie Ihre Änderungen dauerhaft machen wollen, folgen Sie diesen Schritten, um Ihre PATH-Variable richtig zu aktualisieren.

Shell built-ins erklärt

Bevor Sie irgendwelche Variablen in Ihrem Shell-Skript deklarieren, ist es wichtig, dass Sie über Shell built-ins Bescheid wissen.

Wenn Sie mit der Bash-Shell arbeiten, führen Sie die meiste Zeit „Programme“ aus.

Beispiele für Programme sind „ls“, „fdisk“ oder „mkdir“. Hilfe zu diesen Befehlen finden Sie mit dem Befehl „man“, kurz für „manual“.

Haben Sie aber schon einmal versucht, die Dokumentation für den Befehl „source“ zu lesen?

Mit „man“ können Sie die Dokumentation nicht lesen, weil der Befehl „source“ eine in die Shell eingebaute Funktion ist.

Um die Dokumentation für in die Shell eingebaute Funktionen zu lesen, müssen Sie den Befehl „help“ verwenden.

$ help <command>

Die Liste der Shell-Built-Ins ist ziemlich umfangreich, aber hier ist ein Screenshot aller Bash-Befehle, die man auf Ubuntu-Systemen finden kann.

Verwendung von Bash-Variablen

Nun, da Sie die Bash-Built-Ins kennen, ist es an der Zeit, mit dem Schreiben eigener Bash-Skripte zu beginnen.

Zur Erinnerung: Die Befehle, die Sie in Ihrem Terminal eingeben, können in einem Bash-Skript auf genau dieselbe Weise verwendet werden.

Wenn Sie zum Beispiel ein Skript wollen, das einfach den Befehl „ls -l“ ausführt, bearbeiten Sie einfach Ihr Skript, fügen die shebang-Zeile und den Befehl hinzu.

#!/bin/bash# This simple script executes the ls commandls -l

Was aber, wenn Sie Bash-Variablen haben wollen?

Bash-Variablen sind einfache Programmvariablen, die eine Vielzahl verschiedener Eingaben speichern können.

Um eine Bash-Variable zu deklarieren, geben Sie einfach den Namen der Variablen und ihren Wert an, getrennt durch ein Gleichheitszeichen.

VAR=value

Um den Inhalt Ihrer Bash-Variable in Ihrem Skript verwenden zu können, verwenden Sie „$“ und fügen den Namen Ihrer Variablen hinzu.

echo $VAR

Auch wenn Sie diese Syntax verwenden können, um den Variablenwert zu haben, können Sie auch die „Klammer“-Notation verwenden.

echo ${VAR}

Mit dieser Syntax können Variablen miteinander kombiniert werden.

Wenn Sie zum Beispiel zwei Bash-Variablen mit den Namen VAR1 und VAR2 haben, können Sie beide mit der folgenden Syntax ausgeben lassen

echo "${VAR1}${VAR2}"

Ausführen von Befehlen innerhalb von Skripten

Um Befehle innerhalb von Bash-Skripten auszuführen, müssen Sie die Befehlssubstitution verwenden.

Befehlssubstitution ist eine Technik, die in Bash-Shells verwendet wird, um das Ergebnis eines Befehls in einer Variablen zu speichern.

Um einen Befehl in Bash zu ersetzen, verwenden Sie das Dollarzeichen und schließen Ihren Befehl in Klammern ein.

VAR=$(command)

Um zum Beispiel das Ergebnis der Anzahl der Dateien in Ihrem aktuellen Verzeichnis zu erhalten, würden Sie schreiben

#!/bin/bashNUMBER=$(ls -l | wc -l)echo "${NUMBER} files in this directory!"

Wie Sie sehen können, ist die Befehlssubstitution ziemlich praktisch, weil sie dazu verwendet werden kann, Befehle in einem Shell-Skript dynamisch auszuführen und den Wert an den Benutzer zurückzugeben.

Als wir über die Rückgabe von Ergebnissen an den Endbenutzer sprachen, wie behandeln Sie Skripte, die nicht korrekt beendet werden?

Was ist, wenn ein Befehl innerhalb des Skripts nicht korrekt ausgeführt wurde?

Verstehen von Exit-Status

Wenn Sie ein Skript ausführen, selbst wenn Sie keinen Wert zurückgeben, gibt das Skript immer etwas zurück, was wir „einen Exit-Status“ nennen.

Ein Exit-Status in Bash-Skripten zeigt an, ob die Skriptausführung erfolgreich war oder nicht.

Wenn der Statuscode Null ist, war die Skriptausführung erfolgreich. Wenn der Wert jedoch von Null verschieden ist (z.B. eins, zwei oder mehr), bedeutet dies, dass die Skriptausführung nicht erfolgreich war.

Um den Exit-Status zu demonstrieren, führen Sie einen beliebigen gültigen Befehl in Ihrer Bash-Shell aus.

echo "This is a simple working command"

Nutzen Sie nun diesen Befehl, um den Exit-Status des zuletzt ausgeführten Befehls zu überprüfen.

echo ${?}

Wie Sie sehen können, ist die Ausgabe dieses Befehls „0“ oder der Exit-Status des zuletzt ausgeführten Befehls.

Diese Syntax („${?}“) kann in Skripten verwendet werden, um sicherzustellen, dass Befehle korrekt ausgeführt werden.

Der Exit-Status kann in Skripten verwendet werden, um das Skript mit einem bestimmten Statuscode zu beenden.

Wenn Sie das Skript zum Beispiel mit einem Fehler beenden wollen, können Sie den folgenden Befehl in Ihrem Skript verwenden.

exit 1

Ahnlich können Sie den Exit-Code „Null“ verwenden, um anzugeben, dass das Skript erfolgreich ausgeführt wurde.

exit 0

Um zu überprüfen, ob der Statuscode korrekt war, benötigen Sie grundlegende bedingte Anweisungen wie die IF-Anweisung.

Bedingungen in der Bash manipulieren

Manchmal geht es bei der Ausführung von Bash-Skripten nicht nur darum, mehrere Befehle nebeneinander auszuführen: Sie möchten bedingte Aktionen haben.

In manchen Fällen kann es praktisch sein, eine Bedingung zu haben, die prüft, ob der aktuelle Benutzer der Root-Benutzer ist (oder nur ein bestimmter Benutzer auf Ihrem System).

Eine einfache Möglichkeit, Bedingungen in der Bash zu haben, ist die Verwendung der if-Anweisung.

„If“ ist in der Shell eingebaut, daher ist das Handbuch über den „help“-Befehl verfügbar

$ help if

Die Hilfeseite beschreibt die Syntax für den if-Befehl mit Semikolons, aber wir werden diese Syntax verwenden (die gleichwertig ist)

if ]then <commands>else <command>fi

Praxisfall : Prüfen, ob der Benutzer root ist

Um zu zeigen, wofür die if-Anweisung verwendet werden kann, werden wir ein einfaches Skript schreiben, das prüft, ob ein Benutzer root ist oder nicht.

Zur Erinnerung: Der Root-Benutzer hat auf jedem Unix-System die UID auf Null gesetzt.

Mit dieser Information werden wir prüfen, ob die UID auf Null gesetzt ist, wenn dies der Fall ist, werden wir den Rest des Skripts ausführen, andernfalls werden wir das Skript beenden.

Wie in anderen Tutorials (über die Benutzerverwaltung) erklärt, kann man die aktuelle Benutzer-ID mit dem Befehl „id“ ermitteln.

$ id -u1000

Wir werden diesen Befehl verwenden, um zu prüfen, ob der Benutzer, der das Skript ausführt, root ist oder nicht.

Erstellen Sie ein neues Skript und fügen Sie die shebang-Zeile ein.

#!/bin/bash

Fügen Sie direkt darunter den Befehl „id“ ein und speichern Sie das Ergebnis in einer Variablen namens „USERID“, indem Sie die Befehlssubstitution verwenden.

USERID=$(id -u)

Nun, da „USERID“ die aktuelle Benutzerkennung enthält, verwenden Sie eine IF-Anweisung, um zu prüfen, ob die Benutzerkennung Null ist oder nicht.

Wenn dies der Fall ist, schreiben Sie eine einfache Informationsmeldung, wenn nicht, beenden Sie das Skript mit einem Exit-Status von 1.

if ]then echo "This is root"else exit 1fi

Wenn Sie nun das Skript als Ihr aktueller Benutzer ausführen, wird das Skript einfach mit einem Exit-Status von 1 beendet.

Versuchen Sie nun, das Skript als Root-Benutzer auszuführen (mit dem sudo-Befehl)

Wie Sie sehen, wurde Ihre Informationsmeldung angezeigt und das Skript wurde mit einem Fehlercode von Null beendet.

Abschluss

In diesem Tutorial haben Sie die Programmiersprache Bash kennengelernt und erfahren, wie Sie Bash-Skripte auf Ihrem System erstellen können.

Sie haben auch etwas über Exit-Status und bedingte Anweisungen gelernt, die wichtig sind, um eine eigene Logik in Ihre Skripte zu integrieren.

Nun, da Sie mehr Wissen über Bash haben, sollten Sie damit beginnen, Ihre eigenen Skripte für Ihre Bedürfnisse zu schreiben: Sie können zum Beispiel mit einem Tutorial über das Erstellen von Archiv-Backup-Dateien beginnen.

Wenn Sie sich für Linux-Systemadministration interessieren, haben wir einen kompletten Abschnitt auf der Website, den Sie unbedingt besuchen sollten!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.