Liebe Besucherinnen und Besucher,
aufgrund unseres Sommerfestes sind wir am 03. September 2026 bis 14 Uhr erreichbar. Am 04. September 2026 sind wir wieder wie gewohnt für Sie da. Vielen Dank für Ihr Verständnis.
Ihr Team von Sack Fachmedien
- Neu
E-Book, Deutsch, 600 Seiten
Reihe: Rheinwerk Computing
Kofler Scripting
2. Auflage 2026
ISBN: 978-3-367-11772-7
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Das Praxisbuch für Administratoren und DevOps-Teams
E-Book, Deutsch, 600 Seiten
Reihe: Rheinwerk Computing
ISBN: 978-3-367-11772-7
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Scripting ist die Kunst, Code-Probleme in wenigen Zeilen zu lösen. Denn viele Aufgaben in der IT erfordern keine komplexen Lösungen in einer Hochsprache – oft reichen ein paar Zeilen Python-, Bash- oder PowerShell-Code .
Michael Kofler zeigt Ihnen in diesem Praxisbuch , wie Sie die Macht der Scripting-Umgebungen nutzen . Anhand zahlreicher Praxisbeispiele erfahren Sie, wie Sie Aufgaben automatisieren und wie Ihnen Shell- oder Pythonscripts viel Arbeit abnehmen können. Mit dabei ist ein Überblick über moderne Shell-Werkzeuge und IDEs : Visual Studio Code, Git, Claude, SSH und mehr.
Aus dem Inhalt:
- Bash, ZSH und die Linux-Toolbox
- PowerShell und CmdLets
- Python und Pip
- SSH, VSCode, Git, Curl: Werkzeugenkasten für moderne Scripts
- Scripts automatisch ausführen: Cron und Task Scheduler
- Backups automatisieren
- Bilder verarbeiten
- Monitoring: Logging-Dateien auswerten
- Web-Scraping und -Mining
- Scripting in der AWS-Cloud
- Automatisierte Builds mit Docker-Containern
Autoren/Hrsg.
Weitere Infos & Material
Vorwort ... 13
TEIL I. Scripting-Sprachen ... 17
1. Scripting: Do one thing ... ... 19
1.1 ... Was heißt Scripting? ... 19
1.2 ... Script-Sprachen ... 22
1.3 ... Die Qual der Wahl ... 27
2. Zehn mal zehn Zeilen ... 29
2.1 ... Markdown-Rechtschreibkorrektur (Bash) ... 29
2.2 ... Bilder nach Aufnahmedatum sortieren (PowerShell) ... 30
2.3 ... JSON-Datei in das XML-Format umwandeln (Python) ... 31
2.4 ... Tägliches Server-Backup (Bash) ... 32
2.5 ... Web Scraping (Python) ... 32
2.6 ... Wetterdaten protokollieren (Python) ... 34
2.7 ... Hyper-V-Aufräumaktion (PowerShell) ... 35
2.8 ... Statistische Auswertung einer Logging-Datei (Bash) ... 36
2.9 ... Datei-Upload in die Cloud (PowerShell) ... 36
2.10 ... Virtuelle Maschinen klonen (Bash) ... 37
3. Bash, Zsh und Fish ... 39
3.1 ... Terminal, Shell und Bash ... 40
3.2 ... Installation ... 42
3.3 ... Kommandos interaktiv ausführen ... 45
3.4 ... Das erste Bash-Script ... 48
3.5 ... Kommandos ausführen ... 54
3.6 ... Standardeingabe und Standardausgabe ... 56
3.7 ... Globbing, Brace Extension, Umgang mit Datei- und Verzeichnisnamen ... 60
3.8 ... Variablen ... 63
3.9 ... Zeichenketten ... 69
3.10 ... Verzweigungen ... 77
3.11 ... Schleifen ... 83
3.12 ... Funktionen ... 87
3.13 ... Umgang mit Fehlern ... 88
3.14 ... Zsh ... 91
3.15 ... Fish ... 93
4. PowerShell ... 97
4.1 ... Installation ... 98
4.2 ... Das Windows-Terminal ... 101
4.3 ... Aufruf von CmdLets und Funktionen ... 103
4.4 ... Kommandos kombinieren ... 110
4.5 ... Das erste Script ... 113
4.6 ... Variablen, Zeichenketten und Objekte ... 119
4.7 ... Arrays und Hashtables ... 129
4.8 ... Ausgabeumleitung ... 132
4.9 ... Schleifen ... 136
4.10 ... Verzweigungen ... 138
4.11 ... Funktionen und Parameter ... 140
4.12 ... Module ... 146
4.13 ... Fehlerabsicherung ... 148
4.14 ... Referenz wichtiger Sonderzeichen ... 151
5. Python ... 153
5.1 ... Python installieren ... 153
5.2 ... Python in einem Terminalfenster kennenlernen ... 156
5.3 ... Eigene Scripts programmieren ... 157
5.4 ... Elementare Syntaxregeln ... 159
5.5 ... Zahlen ... 161
5.6 ... Zeichenketten ... 163
5.7 ... Listen ... 171
5.8 ... Tupel, Sets und Dictionaries ... 173
5.9 ... Variablen ... 176
5.10 ... Operatoren ... 180
5.11 ... Verzweigungen (if) ... 182
5.12 ... Schleifen (for und while) ... 184
5.13 ... Funktionen ... 190
5.14 ... Textdateien verarbeiten ... 194
5.15 ... Fehlerabsicherung ... 197
5.16 ... Systemfunktionen ... 198
5.17 ... Module ... 200
5.18 ... Zusatzmodule installieren mit pip ... 203
5.19 ... Virtual Environments ... 206
5.20 ... Paketmanager uv ... 208
TEIL II. Arbeitstechniken und Werkzeuge ... 213
6. Linux-Toolbox ... 215
6.1 ... Verzeichnisse und Dateien ... 216
6.2 ... Dateien suchen ... 217
6.3 ... Dateien komprimieren und archivieren ... 219
6.4 ... Arbeiten mit root-Rechten ... 220
6.5 ... Prozesse verwalten ... 223
6.6 ... Software-Installation ... 226
6.7 ... Sonstige Kommandos ... 228
7. CmdLets für die PowerShell ... 231
7.1 ... Verzeichnisse und Dateien ... 231
7.2 ... Dateien suchen ... 235
7.3 ... Dateien komprimieren und archivieren ... 238
7.4 ... Prozessverwaltung und sudo ... 240
7.5 ... Registrierdatenbank und Systeminformationen ... 245
7.6 ... CmdLet-Ergebnisse verarbeiten ... 248
7.7 ... Netzwerk und Firewall ... 251
7.8 ... Sonstige CmdLets ... 254
7.9 ... Zusatzmodule installieren ... 254
7.10 ... Standard-Aliasse ... 257
8. Terminal Tuning ... 261
8.1 ... Paketmanager ... 262
8.2 ... Terminal-Alternativen ... 266
8.3 ... Tuning-Tipps für das Terminal ... 269
8.4 ... Nerdfonts ... 272
8.5 ... Prompt-Frameworks ... 274
8.6 ... Moderne CLI-Tools ... 278
8.7 ... Claude Code ... 284
8.8 ... Editoren im Terminal ... 290
9. Textauswertung mit Filtern und Pipes ... 297
9.1 ... grep, sort, cut und uniq ... 298
9.2 ... Beispiel: ping-Auswertung ... 305
9.3 ... Beispiel: Apache-Log-Analyse ... 307
9.4 ... CSV-Dateien ... 310
10. Reguläre Muster ... 315
10.1 ... Syntaxregeln für reguläre Ausdrücke ... 316
10.2 ... Gruppen und Alternativen ... 318
10.3 ... Reguläre Muster in der Bash (grep, sed) ... 324
10.4 ... Reguläre Muster in der PowerShell ... 329
10.5 ... Reguläre Muster in Python (re-Modul) ... 332
11. JSON, XML und INI ... 337
11.1 ... JSON in der PowerShell ... 337
11.2 ... JSON und Python ... 340
11.3 ... JSON in der Bash ... 344
11.4 ... Beispiel: Claude-Code-Session-Exporter ... 347
11.5 ... XML in der PowerShell ... 352
11.6 ... XML und Python ... 356
11.7 ... XML in der Bash ... 359
11.8 ... INI-Dateien ... 361
12. Scripts automatisch ausführen ... 363
12.1 ... Cron ... 363
12.2 ... Beispiel: Webserver-Monitoring ... 367
12.3 ... Windows Task Scheduler ... 369
12.4 ... Beispiel: Währungskurse speichern ... 373
12.5 ... Änderungen im Dateisystem verfolgen ... 374
13. SSH ... 379
13.1 ... SSH-Client und -Server installieren ... 380
13.2 ... Mit SSH arbeiten ... 383
13.3 ... scp und rsync ... 388
13.4 ... SSH-Authentifizierung mit Schlüsseln ... 390
13.5 ... Beispiel: Bilder-Upload auf einen Linux-Webserver ... 393
13.6 ... Beispiel: Auswertung virtueller Maschinen ... 396
14. Visual Studio Code ... 399
14.1 ... Einführung ... 400
14.2 ... Sprachspezifische VS-Code-Erweiterungen ... 402
14.3 ... Remote-SSH-Erweiterung ... 404
15. Git ... 407
15.1 ... Git-Crashkurs ... 408
15.2 ... Der richtige Umgang mit Einstellungen und Passwörtern ... 416
15.3 ... Git-Automatisierung ... 419
15.4 ... Git Hooks ... 422
TEIL III. Anwendungen und Beispiele ... 425
16. Backups ... 427
16.1 ... Verzeichnisse auf externen Datenträger synchronisieren ... 427
16.2 ... WordPress-Backup ... 432
16.3 ... SQL-Server-Backup ... 434
17. Bildverarbeitung ... 437
17.1 ... Bilddateien manipulieren ... 437
17.2 ... Fotos nach Aufnahmedatum sortieren (ExifTool) ... 441
17.3 ... EXIF-Daten in SQL-Kommandos umwandeln (PyExifTool) ... 445
17.4 ... EXIF-Daten in SQL-Kommandos umwandeln (Pillow) ... 450
17.5 ... GPX-Track aus Fotos erstellen ... 452
18. Visualisierung ... 457
18.1 ... Matplotlib und Seaborn ... 457
18.2 ... Plotly ... 467
18.3 ... Gnuplot ... 472
18.4 ... ImportExcel ... 474
19. Web Scraping ... 477
19.1 ... Websites mit wget herunterladen ... 479
19.2 ... Web Scraping mit regulären Mustern ... 481
19.3 ... Web Scraping mit Beautiful Soup ... 483
19.4 ... Web Scraping mit Playwright ... 487
19.5 ... Web Scraping mit der PowerShell ... 491
20. REST-APIs nutzen ... 495
20.1 ... curl und xh ... 496
20.2 ... REST-APIs in der PowerShell nutzen ... 502
20.3 ... Beispiel: Aktuelles Wetter ermitteln ... 504
20.4 ... REST-APIs in Python nutzen ... 505
20.5 ... Beispiel: Strompreise ermitteln und grafisch darstellen ... 507
21. E-Mail ... 511
21.1 ... Authentifizierungsgrundlagen ... 511
21.2 ... mail und msmtp (Bash) ... 513
21.3 ... smtplib (Python) ... 516
21.4 ... Beispiel: Einmal täglich ein Bild versenden ... 518
21.5 ... imaplib (Python) ... 520
21.6 ... Send-MailKitMessage (PowerShell) ... 523
22. Datenbanken ... 527
22.1 ... Datenbanken aktualisieren und warten ... 528
22.2 ... Neuen Kunden-Account einrichten ... 529
22.3 ... EXIF-Metadaten in einer Datenbank speichern ... 533
22.4 ... JSON-Daten in eine Tabelle importieren ... 536
23. Scripting in der Cloud ... 539
23.1 ... AWS CLI ... 539
23.2 ... Beispiel: Verschlüsseltes Backup in die Cloud hochladen ... 544
23.3 ... AWS-PowerShell-Modul ... 546
23.4 ... Beispiel: Große Dateien einer Webseite in die Cloud auslagern ... 549
24. Virtuelle Maschinen ... 553
24.1 ... Virtuelle Maschinen einrichten und ausführen (KVM) ... 553
24.2 ... Netzwerkkonfiguration automatisieren (KVM) ... 556
24.3 ... Hyper-V steuern ... 559
24.4 ... Virtuelle Maschinen verwalten (VirtualBox) ... 564
25. KI-APIs nutzen ... 567
25.1 ... Chat-API von OpenAI ... 568
25.2 ... Ein eigener ChatBot im Terminal ... 570
25.3 ... Git-Commit-Messages vorschlagen ... 572
25.4 ... Bildbeschreibungen für eine WordPress-Website ... 576
25.5 ... KI-Nutzung in der PowerShell (PSOpenAI) ... 582
25.6 ... Beispiel: Windows-Ereignisprotokoll analysieren ... 585
Index ... 589
1.2 Script-Sprachen
Rein formal unterscheiden sich Script-Sprachen von anderen, »höheren« Programmiersprachen dadurch, dass der Code interpretiert wird. Der Code wird also in einer Textdatei formuliert und dann direkt durch die Bash, die PowerShell oder den Python-Interpreter ausgeführt. Der Code braucht nicht vorher kompiliert (also in eine binäre Darstellung umgewandelt) werden.
Dieses Konzept hat den Vorteil, dass Scripts ohne lange Vorbereitungsarbeiten sofort ausgeführt werden können. Das beschleunigt den Entwicklungsprozess.
Die Verwendung eines Interpreters hat allerdings den Nachteil, dass Scripts zumeist etwas langsamer laufen als kompilierte Programme. Deswegen ist eine Script-Sprache selten die ideale Wahl, um rechenintensive Algorithmen zu entwickeln. Da viele Scripts überwiegend aus Aufrufen anderer Kommandos bestehen, spielt der Effizienzverlust durch den fehlenden Compiler gar keine Rolle.
Als »klassische« Script-Sprachen gelten sämtliche Linux-Shells, also z.B. Bourne Shell, die Korn Shell, Bash und Zsh. Eine Shell ist eigentlich ein Kommandointerpreter, also ein Programm, das Kommandos entgegennimmt und diese ausführt. Werden mehrere solche Kommandos in einer Textdatei gespeichert, entsteht die ursprüngliche Form eines Scripts.
Im Laufe der Zeit wurden unzählige Script-Sprachen entwickelt, die mehr syntaktische Möglichkeiten als traditionelle Shells boten und oft für spezifische Aufgaben optimiert wurden. Dazu zählen beispielsweise JavaScript, Python, PHP und Tcl.
In der Windows-Welt übernahm ursprünglich das unsägliche Programm cmd.exe die Rolle der Shell. Darauf aufbauende *.bat-Dateien sind trotz der äußerst bescheidenen Scripting-Möglichkeiten bis heute im Einsatz. Es folgten VBScript, die für den Office-Einsatz optimierte Sprache VBA und schließlich die PowerShell. Erst damit hatte Microsoft Erfolg: Die PowerShell gilt heute als die Sprache, wenn es darum geht, große Windows-Netzwerkinstallationen zu warten und zu administrieren.
Compiler für Script-Sprachen
Das in der Vergangenheit etablierte Kriterium Interpreter/Compiler zur Unterscheidung zwischen Script- und anderen Sprachen ist heute obsolet. Für viele Sprachen, deren Code anfänglich durch einen Interpreter ausgeführt wurde, gibt es mittlerweile Compiler. Oft handelt es sich um Just-in-Time-Compiler, die den Code unmittelbar vor der Ausführung und unbemerkt durch die Anwenderinnen und Anwender kompilieren. Das trifft unter anderem für JavaScript, PHP und Python zu.
Bash und Zsh
Es liegt auf der Hand, dass ich in diesem Buch nicht auf alle populären Script-Sprachen eingehen kann. Ich habe mich vielmehr auf drei (mit der Zsh vier) Sprachen fokussiert, die für administrative Aufgaben sowie im DevOps-Umfeld am wichtigsten sind. Diese Sprachen möchte ich Ihnen im Folgenden kurz vorstellen.
Der Name Bash ist eine Abkürzung für Bourne Again Shell. Die Bourne Shell war vor mehr als 30 Jahren unter Unix sehr beliebt. Allerdings stand dieses Programm nicht unter einer Open-Source-Lizenz zur Verfügung. Das führte zur Entwicklung der weitgehend kompatiblen Bash, die sich später als Standard-Shell bei den meisten Linux-Distributionen durchsetzte.
Wenn im Linux-Umfeld ohne weitere Erläuterungen von Scripting die Rede ist, dann ist als Scripting-Sprache nahezu immer die Bash gemeint. Egal, ob Server-Prozesse gestartet, Netzwerkverbindungen eingerichtet oder Firewall-Regeln verändert werden sollen -- ganz häufig kommen dazu bereits auf Betriebssystemebene Bash-Scripts zum Einsatz. Daher ist es naheliegend, auch eigene Aufgaben mit der Bash zu erledigen.
Die weite Verbreitung der Bash lässt manchmal darüber hinwegsehen, dass die Wurzeln und die Syntax der Bash sehr alt sind. Dementsprechend ist die Syntax der Sprache mitunter inkonsistent, ab und zu auch einfach grauenhaft. Statt einfacher Funktionen müssen unzählige Sonderzeichen herhalten, um ganz triviale Aufgaben zu erledigen (Zeichenketten bearbeiten, Berechnungen durchführen). Neben Zeichenketten und Arrays gibt es keine weiteren Datentypen. Objektorientierung ist in der Bash sowieso ein Fremdwort.
Auf der Plusseite steht die schier grenzenlose Auswahl von Unix-Tools, die in Scripts genutzt und kombiniert werden können. Die Stärke der Bash liegt also nicht in ihren sprachlichen Möglichkeiten, sondern bei den Kommandos, die Sie in Scripts unkompliziert aufrufen können. (Und Sie wissen ja schon: Diese Kommandos wurden unter dem Motto Do One Thing … entwickelt.)
Einschränkend muss ich noch erwähnen, dass es Einsteigerinnen und Einsteigern schwerfällt, sich in der Bash- und Linux-Kommandowelt zu orientieren. Zwar ist (fast) jedes Kommando für sich gut dokumentiert, aber es gibt keine zentrale Übersicht. (Das begründet den Erfolg meines Buchs »Die Linux-Kommandoreferenz«, das im Rheinwerk Verlag bereits mehrere Auflagen erlebt hat.)
Bash versus Zsh
Die Zsh ist weitgehend kompatibel zur Bash. Für die Script-Programmierung sind die Unterschiede nur minimal, und natürlich können Sie in beiden Shells die gleichen Kommandos aufrufen. Bei der interaktiven Verwendung zeichnet sich die Zsh aber durch viele Vorteile und bessere Erweiterungsmöglichkeiten aus. Deswegen gewinnt die Zsh unter Linux immer mehr Fans und wird von manchen Distributionen sogar schon als Default-Shell verwendet. (Bei anderen Distributionen kann die Zsh mit wenigen Handgriffen installiert werden.)
macOS hat 2019 einen Wechsel von der Bash auf die Zsh vollzogen. Die Motivation von Apple lag weniger bei den technischen Vorzügen, sondern hatte vielmehr mit Lizenzfragen zu tun: Aktuelle Versionen der Bash verwenden die Lizenz GPL 3, die Apple vermeidet. Die Zsh hat dagegen eine liberalere, BSD-artige Lizenz.
Soweit es dieses Buch betrifft, spielt es keine große Rolle, ob Sie die Bash oder die Zsh bevorzugen. Einen kurzen Überblick der wichtigsten Vor- und Nachteile gebe ich in Abschnitt 3.14, »Zsh«. Wenn Sie aber unter macOS bei der Bash bleiben möchten, dann sollten Sie sich die Mühe machen, mit brew install bash eine moderne Version zu installieren. Die mit macOS mitgelieferte Version ist komplett veraltet.
Fish
Seit ca. zwei Jahren verwende ich sowohl unter macOS als auch auf den meisten meiner Linux-Installationen die Friendly Interactive Shell, kurz Fish. Mit diesem Wechsel bin ich nicht alleine -- eher im Gegenteil: Viele Linux-Freaks haben schon Jahre vor mir gewechselt.
Die Fish ist auch nur eine Shell, macht also im Prinzip nichts anderes als die Bash und die Zsh. Die Fish brilliert aber insofern, als die interaktive Bedienung wirklich außerordentlich gut funktioniert: Die Fish errät besser als jede mir bekannte Shell, was Sie als nächstes eintippen möchten, und schlägt entsprechende Vervollständigungen vor.
Der zweite Vorteil der Fish besteht darin, dass sämtliche Features praktisch ohne jede Konfiguration zur Verfügung stehen. Bei der Bash und Zsh müssen Sie zuerst Zeit investieren, bis der Prompt funktioniert, der Git-Status angezeigt wird usw. Bei der Fish klappt das alles -- und viel mehr -- sofort. Nun ist die einmalige Konfiguration einer Shell kein riesiger Aufwand. Aber während meiner Arbeit wechsle ich zwischen unzähligen Rechnern, Servern und virtuellen Maschinen. Und da macht es eben doch einen (entscheidenden) Unterschied, dass nach chsh -s fish und einem neuen Login alles funktioniert, wie ich es mir wünsche.
Alles? Fast alles. Die Fish ist nicht vollständig Bash-kompatibel. Im interaktiven Betrieb ist das kaum zu spüren, wohl aber beim Scripting. Die Fish hat einige (durchaus coole) Features realisiert, die die Variablenverwaltung, die Formulierung von Schleifen usw. betreffen. Aber bei aller Begeisterung für die Fish: Meine Scripts müssen rechner- und plattformübergreifend laufen. Ich kann und will meine Scripts nicht an Fish-Eigenheiten anpassen. Deswegen führe ich meine Scripts, auch wenn ich interaktiv mit der Fish arbeite, weiterhin als Bash-Scripts (Linux) oder in der Zsh (macOS) aus. Das ist kein Problem, solange Sie daran denken, #!/usr/bin/env bash oder #!/usr/bin/env zsh in die erste Zeile einzubauen. Damit wird auch klar, dass die Fish in diesem Buch nur eine untergeordnete Rolle spielt.
PowerShell
Microsoft hat lange Zeit auf grafische Benutzeroberflächen gesetzt -- nicht nur im Office-Bereich, sondern auch zur Server-Administration. Auf den ersten Blick schien das ein Vorteil im Vergleich zu Linux zu sein: Ein...




