Ein Shellscript ist ein wenig der Batchdatei in Windows ähnlich. Ein Shellscript arbeitet im Normalfall im Terminal. Da die Bash, das ist möglicherweise die meistgenutzte Shell unter Linux, aber allmächtig ist, hinkt der Vergleich mit der Batchdatei von Windows. Denn auch die sogenannte “PowerShell” von Windows hat nicht annähernd die Kraft einer Bash.
Inhaltsverzeichnis
- TitelShellscript
H2Inhaltsverzeichnis
H2 Was bringt ein Shellscript
H3Zusammengefasst
H2 Grundlagen
H3Zusammengefasst
H2Vorbereitungen
H3Dateiname
H2Layout eines Script
H2 Unser Beispiel
H3Zusammengefasst
H2 Das Shellscript
H3 Das Shellscript im Einzelnen
H3Zusammengefasst
H3 Das Shellscript starten
H3Das Script mit dem Recht “Ausführbar“
H3Pfad zum Script
H3Terminaleingabe
H2 Shellscript mit Doppelklick starten
H3 Doppelklickdatei erstellen
Was bringt ein Shellscript
Stellen Sie sich vor, sie haben wöchentlich wiederkehrende Arbeiten zu erledigen, die immer nach einen Muster abgearbeitet werden. Oder Sie wollen auch in großen und unregelmäßigen Zeitabständen, sehr komplexe Kommandos nutzen, sind aber zu faul, jedes mal die sehr lange Zeichenkette einzugeben. Da kommt das Shellscript ins Spiel.
Hier eine kleine Motivation für Debian basierende Systeme. Sie wollen Ihr System wie folgt aktualisieren, reparieren und bereinigen.
- Einlesen der Paketlisten # apt update
- Neue Pakete sollen ältere Versionen ersetzen, auch notwendige Abhängigkeiten # apt upgrade
- Es soll auf ein Distributions-Upgrade geprüft werden # apt dist-upgrade
- Wenn notwendig, Konfiguration des Paketverwalters bei fehlerhaften Paketen # dpkg –configure ‑a
- Wenn notwendig, den Paketverwalter selbst reparieren # apt install ‑f
- Paketcaches leeren, also ungenutzte Installationsdateien # apt clean
- Verwaiste Abhängigkeiten mit Ihren Paketen löschen # apt autoremove
- Anzeige ob die Befehle fehlerfrei abgearbeitet wurden
- Oder wo Fehler entstanden sind
Alle diese Kommandos können in wenigen Sekunden durch ein Script erledigt werden. Jetzt können Sie über Fernwartung Ihrem Freund oder Ihrer Mutter schnell ein aktuelles und sauberes debian-basierendes System erstellen.
Aber unser interessantes Beispiel-Script wird wesentlich einfacher sein, versprochen.
Zusammengefasst
- Eigene Shellscripte vereinfachen Alltagsarbeiten
- Eigene Shellscripte sparen eine Menge an Zeit
- Eigene Shellscripte könne Werkzeuge sein, die anderen Menschen helfen
Grundlagen
Im Allgemeinen spricht man von einem Shell-Script. Da unter vielen Distributionen die Bash-Shell, die meist genutzte Shell ist, werden wir uns auf diese konzentrieren.
Um gleich die Angst zu nehmen, das Bash-Script ist eine einfache Textdatei, fertig aus.
Der Unterschied zu anderen Textdateien, ist die erste Zeile in dieser Datei und Sie sollten wissen, was ein Linuxbefehl, auch Kommando, ist.
Außerdem sollten Sie wissen, wo Sie sich im Verzeichnisbaum befinden, damit Sie die Ausgabe Ihres Shellscripts auch finden.
Shellscripts haben die Dateiextension „.sh“, aber ohne diese Dateinamenserweiterung geht es auch, ist aber für die Übersichtlichkeit nicht zu empfehlen.
Zusammengefasst
- Wir erstellen ein Shellscript für die Bash
- Das Shellscript ist eine Textdatei mit einer vordefinierten ersten Zeile
- In einer Shellscript werden Linuxbefehle abgearbeitet
- Die Dateiendung eines Shellscripts ist „.sh“
Vorbereitungen
Dateiname
Bewährt hat sich bei mir die Einschränkung auf folgende Zeichen:
- Ziffern 0 bis 9
- Alle Buchstaben von A bis z
- Als Sonderzeichen nur den Unterstrich, selten noch den Bindestrich
Ansonsten sind Sonderzeichen zu vermeiden, da einigen schon Funktionen zugeordnet sind.
Der Dateiname sollte unbedingt aussagekräftig sein. Denn wenn eines Tages 50 Scripte vorliegen, nützen abgekürzte Namen wie “pa_ne.sh” für “paketliste_neu.sh” nichts mehr.
Zuerst muss mit “which” oder “type” geprüft werden, ob der vorgesehen Dateiname des Script nicht schon vergeben ist. Achtung, die Abfrage ohne Dateiextension.
which paketliste_neu
Sollte die Ausgabe so aussehen “which: no …”, dann gibt es kein Kommando mit gleichem Name.
which: no paketliste_neu in (/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)
Hier mit “type”.
type paketliste_neu
bash: type: paketliste_neu: Nicht gefunden.
Layout eines Script
Auch wenn hier es sich hier nur ein sehr kleines Script handelt, das auch als “alias” genutzt werden könnte, zeige ich noch einige Elemente.
Einzeilige Kommentare beginnen mit einer Raute und höflicherweise einen anschließendem Leerzeichen. Generell werden Kommentare bei der Ausführung des Scripts nicht angezeigt.
#
Mehrzeilige Kommentare beginnen mit Doppelpunkt zwei nach links zeigenden spitzen Klammern und ein einleitendes Kommentarwort.
: <<Kommentar
Für auszugebenden Text wurde früher “echo” genommen. Da aber einige Distributionen daran etwas rumbasteln, empfehle ich “printf”. In den Anführungszeichen steht der auszugebende Text.
printf "Textinhalt"
Zeilenumbruch entweder mit Backslash \ oder Backslash mit n wie \ n darstellen, letztere ist meine Empfehlung.
printf "Ein sehr langer Text\nwurde eben umgebrochen."
Unser Beispiel
In unserem Beispiel beziehen wir uns auf die Debian-Kommandos, die auch für „Ubuntu“, „Linux Mint“ und weitere Debian-Derivate gelten.
Es wäre ja interessant zu wissen, welche Pakete in unserem laufenden GNU/Linux vorhanden sind. Einmal um Programme zu finden, die nicht mehr genutzt werden und im grafischen „Softwaremanager“ leider nicht angezeigt werden. Und es könnte für eine Wiederherstellung des bestehenden Systems, ein Backup der Paketliste erstellt werden.
Das war das Stichwort „Paketliste“. Wir erstellen mit Hilfe eines einfachen Scripts eine Paketliste aller installierten Pakete in Form einer Textdatei mit Spaltenansicht.
Zudem bekommt jede Datei das aktuelle Datum mit in den Dateinamen geschrieben, so können Sie schnell Vergleiche anstellen.
Und das Sahnehäubchen, alle Pakete werden mit Angabe der Version und einer Beschreibung Ihrer Funktion ausgeliefert!

Zusammengefasst
- Unser Shellscript erstellt eine Liste aller installierten Pakete
- Die Liste ist eine txt-Datei, auch Plaintext-Datei
- Im Dateinamen ist das aktuelle Datum gleich mit angegeben
- In der Paketliste wird jedem Paket die Versionsnummer, eine Kurzbeschreibung und andere Informationen mitgegeben
Das Shellscript
Bitte legen Sie eine Textdatei mit dem Namen „paketliste_neu.sh“ an und füllen Sie mit dem folgenden Inhalt. Zum Abschluss bitte diese Datei abspeichern.
#!/bin/bash
# Scriptname : backup-paketliste
# Description: Safe the packages_list with few informations
# Author : Frank Rosenberger <https://ro-kom.de>
# Date : 2018-11-31
# Version : 0.3
# License : GPL3
COLUMNS=200 dpkg-query -l > ~/paketliste_`date +%Y%m%d`.txt
exit [n]
: <<Kommentar
Für deutsche Benutzer
Dieses Script listet alle installierten Pakete mit Name, Version, Architektur und Beschreibung auf und speichert diese in eine Datei mit aktuellem Datum im Dateinamen und Dateierweiterung für Plaintext in "/home/BENUTZER/".
Beachte, vor date und nach day ist KEIN Apostroph, sondern jeweils ein Gravis.
Kommentar
Der einleitende Script-Header und die Kommentare sind nicht verpflichtend. Aber gerade Kommentare erleichtern das Verstehen von sehr komplexen Script erheblich und ein nachfolgender Nutzer oder Betreuer ist dafür dankbar.
Das Shellscript im Einzelnen
Nun die Zeilen detailliert beschrieben.
Zeile 1. Das ist die interpretierende Shell. In unserem Fall die Bash, also die Bourne-Again-Shell. Diese Zeile wird auch „She-bang“ genannt. Hier hat die Raute keine Kommentarfunktion. Außerdem dürfen keine weitere Zeichen angegeben werden. Nur Argumente haben noch eine Berechtigung in dieser Zeile.
1. #!/bin/bash
Zeile 2, ist eine Leerzeile zur Übersicht.
2.
Zeile 3, ist ein Kommentar, angezeigt durch die Raute. Ein aussagekräftiger Name für das Script.
3. # Scriptname : backup-paketliste
Zeile 4, ist ein Kommentar. Eine Beschreibung erleichtert komplexere Scripte in ihren Funktionen zu verstehen.
4. # Description : Safe the packages_list with few informations
Zeile 5, Der Kommentar zeigt den Autor an, um gegebenenfalls eine hilfreiche Rückmeldung zu seinem Script zu geben.
5. # Author : Frank Rosenberger <https://ro-kom.de>
Zeile 6 ist ein Kommentar. Angabe des Datum der Script-Veröffentlichung.
6. # Date : 2018-11-31
Zeile 7 ist ein Kommentar. Eine Versionsnummer hilft die Fehlerbehebung oder Entwicklung nachzuvollziehen
7. # Version : 0.3
Zeile 8 ist ein Kommentar. Angabe der Lizenz unter der man dieses Script veröffentlicht.
8. # License : GPL3
Zeile 9 ist eine Leerzeile um den Kopf zu beenden.
9.
Zeile 10, jetzt kommen die Kommandos, also das Herzstück des Shellscript. Nachfolgend aufgeschlüsselt.
- COLUMNS=200 Hier wird die Spaltenanzahl angegeben. In unserem Fall dürfen 200 Zeichen auf einer Zeile stehen.
- dpkg-query ‑l Hier eine Abfrage des Paketverwalters „dpkg“ nach den installierten Paketen. Das Argument „-l“ steht hier als Wildcard, auch „Joker“, für alle Pakete.
- > Diese Spitze Klammer soll einen „Druck“ der Abfrage erstellen. Druck im Sinne von „Erstelle eine Datei“.
- ~/ Die Tilde und der Frontslash geben den Pfad an, wo diese Datei abgelegt werden soll. In unserem Fall, durch de Tilde gekennzeichnet, direkt in das Heimatverzeichnis, in dem auch die Verzeichnisse „Bilder“, „Dokumente“ und so weiter, liegen.
- paketliste_
date +%Y%m%d
.txt Das ist der Dateiname mit dem Datum im Dateiname und als Textdatei.
COLUMNS=200 dpkg-query -l > ~/paketliste_date +%Y%m%d.txt
Zeile 11, das Script soll nun beendet werden. Das kleine „n“ in den eckigen Klammern ist für die Ausgabe einer Ziffer. Die Ziffer ist optional für eine Fehlerausgabe.
exit [n]
Zeile 12 ist eine Leerzeile um die Kommandos vom abschließenden Kommentar zu trennen.
12.
Zeile 13 bis vorletzte Zeile, das ist ein mehrzeiliger Kommentar, angezeigt durch den Doppelpunkt und den zwei spitzen Klammern die nach links zeigen und einem Wort, hier ist es „Kommentar“.
: <<Kommentar
Für deutsche Benutzer
Dieses Script listet alle installierten Pakete mit Name, Version, Architektur und Beschreibung auf und speichert diese in eine Datei mit aktuellem Datum im Dateinamen und Dateierweiterung für Plaintext in "/home/BENUTZER/".Beachte, vor date und nach day ist KEIN Apostroph, sondern jeweils ein Gravis.
Kommentar
Die letzte Zeile beendet den mehrzeiligen Kommentar mit der Wiederholung des Wortes nach den spitzen Klammern.
Kommentar
Zusammengefasst
- Jedes Shellscript beginnt mit Angabe des Interpreters
- Ein Kopf mit den Angaben des Autors, Lizenz, Datum, Scriptname,Version und Beschreibung ist hilfreich für die Nutzung und Weiterentwicklung des Script
- Das Kernstück des Scripts sind Kommandos
- Einzeilige Kommentare werden mit einer Raute gekennzeichnet
- Kommentare erleichtern das Verständnis für komplexere Scripte
Das Shellscript starten
Das Script mit dem Recht “Ausführbar”
Bevor ein Shellscript startet wird es mit folgendem Kommando ausführbar gesetzt oder mit der oktalen Schreibweise.
chmod u+x paketliste_neu.sh
chmod 0744 paketliste_neu.sh
Pfad zum Script
Damit alles so funktioniert, wie hier angegeben, muss die Datei direkt in das /home-Verzeichnis des jeweiligen Benutzers, hier “user”.
/home/user/paketliste_neu.sh
Später, wenn schon viele Scripts erstellt wurden, sollte diese in ein Verzeichnis, die in der Umgebungsvariable PATH schon eingetragen sind oder man setzt ein neues Verzeichnis dazu, wie nachfolgendes Verzeichnis.
/home/user/bin
Terminaleingabe
Um ein Shellscript zu starten wird „sh“, beziehungsweise “bash”, und ein Leerzeichen benötigt, vor dem Pfad und dem Script-Dateiname. Also wie folgt vorgehen.
- Öffnen Sie ein Terminalfenster dort wo das Shellscript abgelegt ist, bei komplexen Scripten bitte die Konsole statt dem Terminalfenster nutzen
- Geben Sie ein „sh ~/paketliste_neu.sh“ und bestätigen Sie mit der „Enter“-Taste, fertig
- Nun in das Heimatverzeichnis gehen und die Paketliste öffnen
Wenn eine sehr lange Liste in der Datei zu sehen ist, haben Sie Ihr erstes Script realisiert, Glückwunsch.
Shellscript mit Doppelklick starten
Windows-Umsteigern wollen einen Doppelklick. Auch diese „Erleichterung“ ist möglich. Dazu muss man wissen, unter Linux ist alles eine Datei, egal ob ein Gerät, wie die Festplatte oder ein Doppelklick zum starten eines Shellscript. Deswegen erstellen wir jetzt die Doppelklickdatei, oder besser die „NeuePaketliste.desktop“-Datei. Auch diese Datei ist eine reine Textdatei, aber mit der Dateinamenserweiterung“.desktop“ statt „.txt“.
Doppelklickdatei erstellen
Also eine Doppelklickdatei gibt es nicht in den einschlägigen Lexika, es ist eine Wortschöpfung um den Vorgang zu visualisieren. Es entspricht in Windows der Datei-Verknüpfung. Bitte auf dem Schreibtisch eine Textdatei anlegen und diese mit „NeuePaketliste.desktop“ benennen. Öffnen Sie die Datei mit Ihrem Texteditor, also Gedit oder Mousepad, und geben folgenden Inhalt ein.
[Desktop Entry]
Version=1.0
Name=paketliste_neu.sh
Comment=this script safe the packages_list with few informations
GenericName=NeuePaketliste
Exec=sh
Terminal=true
Type=Application
Icon=preferences-system-windows
StartupNotify=true
Path=~/
Nun kann eine neue Datei der Paketliste vom Schreibtisch/Desktop aus mit einem Doppelklick erstellt werden, die wiederum im Heimatverzeichnis zu finden ist.