Unter Microsoft Windows nennt man sie Batch-Dateien, unter Linux Skripte – es handelt sich dabei um eine vereinfachte Form des Programmierens. Scripte sind so gesehen nichts anderes als ausführbare Textdateien, sie können einfache, aber auch aufwendigere Aufgaben erfüllen. Man kann sie per Mausklick, am Terminal oder auch mit grafischer Oberfläche nutzen.
In diesem fortlaufenden Beitrag sehen wir uns das Erstellen und Nutzen von Scripts unter Linux etwas näher an. Wir werden uns hier rein mit Bash-Skripts befassen.
Inhaltsverzeichnis
Was wird benötigt?
Um Skripte zu erstellen braucht man nicht mehr als einen beliebigen Texteditor, ich für meinen Fall nutze Emacs, unter der Desktop-Umgebung KDE ist Kate vorinstalliert, unter GNOME Gedit und so weiter und so fort. Es gibt natürlich auch erweiterte Editoren und ganze Entwicklungsumgebungen (IDE’s), solche sind aber für reine Skripte nicht erforderlich.
Grundlagen
Wie schon beschrieben sind Skripte – auch Bash-Skripte genannt nichts anderes als Textdateien, beginnen wir ganz einfach einmal. Ich erstelle eine Textdatei namens „skript.sh“ – „.sh“ ist die standardmäßige Dateiendung eines Skriptes, ein Skript muss aber nicht unbedingt eine Dateiendung haben, die Datei könnte sich auch ganz einfach „skript“ nennen.
Die erste Zeile eines Bash-Skripts beginnt immer mit:
#!/bin/bash
Diese Zeile nennt sich Shebang – diese dient dazu damit die Bash versteht worum es sich bei dieser Datei handelt, was sie damit anfangen soll. Durch diese Zeile weiß die Shell – die Bash – also der Terminal-Interpreter Bash soll damit arbeiten, für ein Perl-Skript würde die Zeile in diesem Fall wie folgt lauten:
#!/usr/bin/perl
Nach dem Shebang können wir schon die entsprechenden Befehle angeben und dies ist viel einfacher als bei Batch-Dateien unter Windows. Wir können jeden Befehl angeben, den wir auch auf dem Terminal nutzen können. Etwa den Befehl:
ls
um den Inhalt des aktuellen Verzeichnisses anzuzeigen. Der Inhalt des Skripts würde nun also so aussehen:
#!/bin/bash
ls
Damit das Skript ordentlich beendet wird (dies sollte vor allem bei größeren Skripts angewendet werden) setzt man an die letzte Stelle ein:
exit
Also:
#!/bin/bash
ls
exit
Bisher haben wir jedoch nur eine reine Textdatei, diese können wir gerade einmal mit einem Texteditor öffnen und uns den Inhalt ansehen – was wir benötigen ist eine ausführbare Textdatei. Wir machen eine Textdatei ausführbar, indem wir diese rechts anklicken und „Eigenschaften → Berechtigungen“ öffnen und die Checkbox „Ausführbar“ aktivieren:

Das Ausführbar machen gelingt auch am Terminal mit dem Befehl:
chmod +x Dateiname
In diesem Beispiel also:
chmod +x skript.sh
Nun können wir das Skript am Terminal starten, dies gelingt mit folgenden zwei Möglichkeiten:
sh skript.sh
./skript.sh

Ist ein Skript einmal ausführbar gemacht, kann man es ohne Probleme weiter mit dem Texteditor bearbeiten und ausführen, noch einmal ausführbar machen ist nicht nötig.
Optionen, Verzeichnisse und Dateinamen gibt man im Befehl im Skript einfach mit an – also etwa:
#!/bin/bash
ls -la
exit
Nichts anderes als am Terminal also. Nun lassen sich natürlich auch mehrere Befehle im Skript angeben, als Beispiel:
#!/bin/bash
ls
ls -l
ls -la
exit
Eine weitere Methode mehrere Befehle anzugeben wäre diese durch ein „;“ mit Leerzeichen zu trennen:
#!/bin/bash
ls; ls -l; ls -la
exit
In beiden Fällen werden die Befehle der Reihe nach abgearbeitet, der erste wird ausgeführt, anschließend der zweite, es folgt der dritte und so weiter und so fort bis alle abgearbeitet wurden:

Besonders bei größeren Skripts ist es übersichtlicher Informationen einzufügen, also etwa welche Aktion an welcher Stelle ausgeführt wird – dies gelingt, indem man der Bash zeigt, was sie ignorieren soll. Hierzu nutzt man die „#“ – einige Beispiele:
#!/bin/bash
# Der Befehl 'ls' ohne Optionen
ls
ls -l # Der Befehl 'ls' mit einer Option
#####################################
# Der Befehl 'ls' mit zwei Optionen #
#####################################
ls -la
exit
Wie üblich lassen sich Ausgaben eines Befehls natürlich auch in einem Skript in eine Datei speichern – hierbei wird die Datei angelegt, wenn sie noch nicht existiert:
#!/bin/bash
ls > /home/benutzername/dateiname.txt
exit
Man nutzt ganz einfach den Operator „>„. Besteht die Datei jedoch schon, wird diese überschrieben, ist dies nicht erwünscht nutzt man den Operator „>>„:
#!/bin/bash
ls >> /home/benutzername/dateiname.txt
exit
Besteht die Datei „dateiname.txt“ noch nicht, wird sie angelegt, besteht die Datei schon, wird die Ausgabe am Ende der Datei angehängt – etwa:
Dateiname.txt
skripte-1.jpg
skripte-2.jpg
skripte.jpg
skript.sh
Dateiname.txt
skripte-1.jpg
skripte-2.jpg
skripte.jpg
skript.sh
Hierbei wäre es natürlich hilfreich, wenn neue Einträge von älteren unterschieden werden – ideal ist hier der Befehl „date
“ – er gibt Datum und Uhrzeit aus:
#!/bin/bash
date >> /home/benutzername/dateiname.txt
ls >> /home/benutzername/dateiname.txt
exit
So 03 Okt 2021 15:43:05 CEST
Dateiname.txt
skripte-1.jpg
skripte-2.jpg
skripte.jpg
skript.sh
So 03 Okt 2021 15:43:06 CEST
Dateiname.txt
skripte-1.jpg
skripte-2.jpg
skripte.jpg
skript.sh
Nun haben wir noch ein kleines Problem, unser Skript ist nicht gerade sehr mobil. Nehmen wir einmal an, das Skript liegt im Home-Verzeichnis unter „/home/robert/skripte/skript.sh„, ich möchte das Skript jedoch unter „/home/robert/Dokumente/“ nutzen – ich müsste den kompletten Pfad zum Skript angeben, also in diesem Fall:
sh /home/robert/skripte/skript.sh
Selbst abgekürzt noch sehr umständlich:
sh ~/skripte/skript.sh
Es geht viel einfacher – verschieben Sie das Skript am Terminal als Administrator etwa in das Systemverzeichnis „/usr/bin/„:
mv skripte.sh /usr/bin/
Nun liegt das Skript in einem Verzeichnis, in dem die Bash nach ausführbaren Dateien sucht. Egal in welchem Verzeichnis Sie sich auf dem Terminal nun befinden – Sie können das Skript ganz einfach mit dem Befehl:
skript.sh
starten. Wichtig natürlich – Sie verschieben das Skript als Administrator und der Befehl „mv
“ fragt nicht nach, ob er eine eventuell gleichnamige Datei überschreiben soll oder nicht – sehen Sie zuerst nach, ob eine gleichnamige Datei schon im Verzeichnis vorhanden ist.
Noch keine Reaktion