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
Kofler | Scripting | E-Book | www.sack.de
E-Book

E-Book, Deutsch, 600 Seiten

Reihe: Rheinwerk Computing

Kofler Scripting

Das Praxisbuch für Administratoren und DevOps-Teams
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



Die Kunst, Probleme in 10 Zeilen zu lösen

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
Kofler Scripting jetzt bestellen!

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...


Kofler, Michael
Michael Kofler hat Telematik an der TU Graz studiert und ist einer der erfolgreichsten deutschsprachigen IT-Fachbuchautoren. Zu seinen Themengebieten zählen neben Linux auch IT-Sicherheit, Python, Swift, Java und der Raspberry Pi. Er ist Entwickler, berät Firmen undarbeitet als Lehrbeauftragter.



Ihre Fragen, Wünsche oder Anmerkungen
Vorname*
Nachname*
Ihre E-Mail-Adresse*
Kundennr.
Ihre Nachricht*
Lediglich mit * gekennzeichnete Felder sind Pflichtfelder.
Wenn Sie die im Kontaktformular eingegebenen Daten durch Klick auf den nachfolgenden Button übersenden, erklären Sie sich damit einverstanden, dass wir Ihr Angaben für die Beantwortung Ihrer Anfrage verwenden. Selbstverständlich werden Ihre Daten vertraulich behandelt und nicht an Dritte weitergegeben. Sie können der Verwendung Ihrer Daten jederzeit widersprechen. Das Datenhandling bei Sack Fachmedien erklären wir Ihnen in unserer Datenschutzerklärung.