Aus EasyLinux 02/2016

Miniprogramme für die Shell schreiben

© Fotoclip Collection

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.

EasyLinux 02/2016 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: