AA_PO-5867-FotoClip_Collection-03_Objekte-GEWA_Fotostudio-Filmklappe_geschlossen.eps

© Fotoclip Collection

Miniprogramme für die Shell schreiben

Scripted Reality

Aus den Shell-Tipps und dem Guru-Training kennen Sie viele nützliche Kommandozeilentools. Die können Sie in kleinen Shell-Skripten zu leistungsfähigen Miniprogrammen bündeln. Im einfachsten Fall lassen Sie damit mehrere Befehle automatisch nacheinander ablaufen, doch Skripte haben noch mehr zu bieten.

Nützliche Shell-Skripte zu schreiben, erfordert in erste Linie ein wenig Kreativität – daneben müssen angehende Shell-Programmierer auch wissen, wie man solche Skripte grundsätzlich erstellt: Da geht es um den formalen Aufbau von Skriptdateien, die Syntax der Standard-Shell bash. Die ist aber schnell erlernt, und wenn Sie diese einmal beherrschen, sind Ihnen kaum Grenzen gesetzt.

Ausgangspunkt jedes (nützlichen) neuen Shell-Skripts ist immer der Wunsch, eine Aufgabe zu automatisieren. Leztztlich geht es darum, Zeit zu sparen und langweilige Wiederholungen zu meiden. Nehmen wir als Einstiegsbeispiel an, dass Sie sich regelmäßig auf der Shell über den freien Arbeitsspeicher und den freien Festplattenplatz auf der Partition, die /home/ enthält, informieren möchten. In der Shell würden Sie dazu die zwei Befehle free und df -h /home verwenden. Machen Sie genau das (warum auch immer) mehrmals am Tag, überlegen Sie sich mit der Zeit, dass hier ein Shell-Skript die Tipparbeit reduzieren könnte.

Alias für Kurzbefehle

Für diese noch sehr einfache Aufgabenstellung können Sie auch die Alias-Funktion nutzen, die in die Shell eingebaut ist: Geben Sie z. B.

alias i="free; df -h /home"

ein, können Sie anschließend einfach den Befehl i verwenden, um die beiden Kommandos nacheinander abarbeiten zu lassen. Das Semikolon trennt die beiden Befehle voneinander. Das funktioniert aber nur in der Shell, in der Sie dieses Alias gesetzt haben. Tragen Sie die Zeile am Ende der Datei ~/.bashrc ein, ist der neue Befehl auch in allen zukünftig geöffneten Shell-Fenstern verfügbar.

Hier soll es aber um Skripte gehen, also basteln Sie statt des Alias eine Skriptdatei. Dazu benötigen Sie einen Texteditor, z. B. Kate oder gedit; wenn Sie den Konsoleneditor vi kennen (und bedienen können), geht es damit schneller und ohne Zusatzfenster. In eine neue, leere Datei tragen Sie die Zeile

free; df -h /home

ein und speichern – schon haben Sie die erste Skriptdatei erstellt. Diese müssen Sie noch ausführbar machen, z. B. über das Kommando

chmod a+x Dateiname

Liegt die Datei im aktuellen Arbeitsverzeichnis und heißt z. B. i.sh, können Sie diese anschließend mit

./i.sh

ausführen – der führende Punkt ist wichtig, damit die Shell die Skriptdatei findet, weil sie (zumindest standardmäßig) nicht im aktuellen Ordner sucht, sondern eine über die Shell-Variable PATH festgelegte Liste von Ordnern nach ausführbaren Programmen durchsucht. Wie im Beispiel, ist es üblich, Shell-Skripten die Dateiendung .sh zu geben – nötig ist das aber nicht, Sie können auch ganz ohne Endung arbeiten und die Datei z. B. nur i nennen.

In Shell-Skripten verzichtet man (u. a. wegen einer besseren Lesbarkeit) meist darauf, mehrere Befehle in eine Zeile zu schreiben. Außerdem ist es sinnvoll, in der ersten Zeile der Skriptdatei anzugeben, welche Shell das Skript ausführen soll. Schließlich bietet es sich an, Befehle zu kommentieren: Bei kleineren Skripten ist das überflüssig, aber komplexere Skriptdateien bleiben damit auch Jahre später noch verständlich. Einen Kommentar ergänzen Sie in einer Zeile hinter der Raute (#). Die so veränderte Version der Datei hat diesen Aufbau:

#!/bin/bash
free           # Arbeitsspeicher
df -h /home    # Plattenplatz

Die erste Zeile enthält einen speziellen Kommentar; hinter #! (mit zusätzlichem Ausrufezeichen) steht der Pfad zur Shell (Bash), und damit sagen Sie dem System, dass die Bash – und nicht etwa eine andere Shell – das Skript ausführen soll. Diese Zeile sollten Sie an den Anfang jeder Skriptdatei stellen.

Ändern Sie nachträglich eine schon mit chmod ausführbar gemachte Skriptdatei, bleibt die Eigenschaft erhalten; es ist also nicht nötig, erneut ein chmod-Kommando einzugeben.

Pipelines

Schon aus dem normalen Shell-Einsatz kennen Sie vielleicht die mit dem Zeichen "|" erzeugten Pipes. Ein kleines Beispiel für dessen Einsatz ist die Such nach dem größten Unterordner im aktuellen Verzeichnis: Mit

du -sm *

lassen Sie sich für jede Datei und jeden Ordner im aktuellen Arbeitsverzeichnis den belegten Speicher in MByte ausgeben. Das erzeugt eine Ausgabe wie in Listing 1.

Listing 1

Unsortierte "du"-Ausgabe

$ du -sm *
0       00_anzeigen
5       01_layout
1       02_layoutueberpruefung
1       03_schlussredaktion
1       04_layoutendcheck
1       05_pdf-endcheck
0       06_final
18      07_dvd-labels
210     0_vorlagen
1       10_seitenplan
0       11_online
151     html
276     orig_txt

Die Ausgabe ist informativ, leidet aber bei einer längeren Liste daran, dass sie unsortiert ist. Sie könnten die Programmausgabe in eine Ausgabedatei umleiten, indem Sie an den Befehl > datei anhängen und die so erzeugte Datei dann mit sort -n datei numerisch (-n) sortiert ausgeben – einfacher geht es mit einer Pipe. Dazu kombinieren Sie die beiden Kommandos, schreiben also

du -sm * | sort -n

Die Pipe erspart Ihnen somit die Verwendung einer temporären Datei für Zwischenergebnisse. Listing 2 zeigt den Effekt im direkten Vergleich: Die größten Ergebnisse stehen jetzt am Ende der Ausgabe. Auch solche Pipes können Sie in ein Shell-Skript einbauen.

Listing 2

Sortierte "du"-Ausgabe

$ du -sm * | sort -n
0       00_anzeigen
0       06_final
0       11_online
1       02_layoutueberpruefung
1       03_schlussredaktion
1       04_layoutendcheck
1       05_pdf-endcheck
1       10_seitenplan
5       01_layout
18      07_dvd-labels
151     html
210     0_vorlagen
276     orig_txt

Pipes können zudem aus mehr als zwei Kommandos bestehen, Ihrem Erfindungsreichtum sind also keine Grenzen gesetzt.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Bash-Skripte sind Programme
    Wer regelmäßig mit der Shell arbeitet, wird leicht zum Programmierer: Schreiben Sie mehrere Shell-Befehle in eine Textdatei und machen diese ausführbar, haben Sie schon Ihr erstes Shell-Skript entwickelt. Die Shell bietet als Programmiersprache aber noch viel mehr.
  • Kreislauf
    Schleifen ermöglichen das mehrmalige Abarbeiten von Anweisungen. Dabei kann das begrenzende Ereignis sowohl außerhalb als auch innerhalb der Schleife liegen.
  • Verschlungene Pfade
    Mit Schleifen, Fallunterscheidungen und Funktionen programmieren Sie komplexe Skripte auf einfache und elegante Weise.
  • Alltagsaufgaben mit Skripten beschleunigen
    Ein Themenschwerpunkt Beschleunigung darf die Shell nicht auslassen, denn der Grundtenor unserer Guru-Training-Rubrik ist doch, dass Sie auf der Shell schneller als mit GUI-Tools arbeiten. Wir geben ein paar nützliche Beispiele.
  • Klar signalisiert
    Statt Prozesse einfach abzuschießen, fangen Profis deren Kommunikation geschickt ab und lenken mit den passenden Signalen die Arbeit des Rechners gekonnt in die gewünschte Richtung.
Kommentare

Infos zur Publikation

EL 11/2017-01/2018: Einstieg in Linux

Digitale Ausgabe: Preis € 9,80
(inkl. 19% MwSt.)

EasyLinux erscheint vierteljährlich und kostet 9,80 Euro. Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 33,30 Euro. Details dazu finden Sie im Computec-Shop.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!      

Stellenmarkt

Aktuelle Fragen

Installation Linux mint auf stick
Reiner Schulz, 10.12.2017 17:34, 0 Antworten
Hallo, ich hab ein ISO-image mit Linux Mint auf einem Stick untergebracht Jetzt kann ich auch...
Canon Maxify 2750 oder ähnlicher Drucker
Hannes Richert, 05.12.2017 20:14, 4 Antworten
Hallo, leider hat Canon mich weiterverwiesen, weil sie Linux nicht supporten.. deshalb hier die...
Ubuntu Server
Steffen Seidler, 05.12.2017 12:10, 1 Antworten
Hallo! Hat jemand eine gute Anleitung für mich, wie ich Ubuntu Server einrichte? Habe bisher...
Tinte sparen bei neuem Drucker
Lars Schmitt, 30.11.2017 17:43, 2 Antworten
Hi Leute, ich habe mir Anfang diesen Monats einen Tintenstrahldrucker angeschafft, der auch su...
Für Linux programmieren
Alexander Kramer, 25.11.2017 08:47, 3 Antworten
Ich habe einen Zufallsgenerator entworfen und bereits in c++ programmiert. Ich möchte den Zufalls...