Eine kleine bash-Fibel

Ich mache das mal nicht wie im Film, wo zuerst die eigentliche Geschichte kommt und dann, wenn es gut läuft und die 5. Fortsetzung nicht mehr passend erscheint, eine Vorgeschichte groß aufgezogen wird.

Ich fange vorn an.

Allgemeines zur Einleitung

Linux-Benutzer werden der Kommandozeile früher oder später über den Weg laufen, früher, wenn es Probleme gibt, die gelöst werden wollen, später, wenn man die Probleme hinnimmt.

In dem normalerweise als “Konsole” oder “Terminal” bekannten Fenster, welches mit blinkendem Cursor und schwarzem Hintergrund hungrig auf Eingaben wartet, läuft das Programm der Standart-Shell. Eigentlich braucht die Shell kein Fensterchen, aber ist ja hübscher so…

Das ist jedenfalls dasjenige Stück Software, welches bei unixoiden Systemen zwischen dem Betriebsystem mit seinen Benutzern und dem Kernel, also dem Kern des Betriebsystems, steht. Mit der Shell lässt sich demnach der Rechner komplett steuern, wenn man über die entsprechenden Kenntnisse von Strukturen und Befehlen verfügt.

Grafik von http://en.kioskea.net/contents/linux/linshell.php3

Wozu kann man das gebrauchen? — Der Teaser

Naja, mit einigen Kenntnissen über die Befehlssyntax in der Kommandozeile und den grundlegenden Umgang mit einigen Programmen lassen sich diverse, meist stupide Aufgaben ganz einfach effizient beschleunigen. Nehmen wir mal an wir haben 1000 Dateien 1.dat, 2.dat usw., in denen wir jeweils Punkte durch Kommata ersetzen wollen. In der Shell geht das mit einer For-Schleife:

for file in $(ls *.dat); do
sed -i 's/./,/g' $file;
done
  • Die Variable $(ls *.dat) beinhaltet alle Dateien im aktuellen Verzeichnis, deren Namen mit .dat enden.
  • Das Programm sed wird hier benutzt, um Punkte durch Kommata zu ersetzen.
  • Die Variable $file enthält in jedem Schleifendurchlauf einen Dateinamen aus der Liste $(ls *.dat)

Ihr seht: Eine Befehlseingabe kann die Ersetzung in allen Dateien vornehmen. Die Ausgaben von verschiedenen Programmen können als Variableninhalt benutzt und weiterverarbeitet werden. Es gibt keine Dateitypen.

wen’s schon jetzt gepackt hat…

Kompliziertere Abfolgen von Befehlen als das obige Beispiel kann man allerdings besser in eine Textdatei schreiben, die man mit chmod o+x <DATEI> ausführbar machen kann. Das ist um einiges übersichtlicher und Fehler sind leichter zu erkennen und zu beheben. An den Anfang der Datei gehört die sogenannte Shebang-Zeile

#!/bin/bash
...

die dem System sagt mit welchem Programm er den vorliegenden Skriptsprachen-Code interpretieren soll (bei uns die Bash). Bei Perl-Skripten heißt es dementsprechend

#!/usr/bin/perl

und so weiter…

Was die Bash besser kann als du

Zunächst vielleicht: Die Bash kann vieles besser als du….vorausgesetzt du sagst ihr wie.

Bevor man allerdings seinen eigenen Kopf dazu bemüht ihr eine Datei vorzubereiten in der die Aufgabe bis ins Detail formuliert ist, sollte man sich fragen: Lohnt sich das? Führe ich die Aufgabe vielleicht mehrfach aus? Kann ich das Skript oder Teile davon nochmal verwenden?

Wenn diese Fragen mit vielleicht oder gar nein beantwortet werden, sollte man vielleicht von einem Skript absehen und die Arbeit per Hand ausführen!

Das heißt: Selbst wenn die Bash die Aufgabe in Sekundenbruchteilen bewältigen kann — du musst es formulieren. Und wenn die Formulierungszeit länger ist, als die Zeit, die du brauchst um die Aufgabe manuell zu lösen, dann ist die Shell fehl am Platz.

Halt — nicht ganz!

Du lernst ja dabei! Und einfache Shellprogrammierung zu beherrschen kann bei den noch folgenden Aufgaben nützlich sein. Wenn es also nur geringfügig weniger Zeit in Anspruch nimmt die Aufgabe manuell auszuführen, könnte sich ein Skipt schon lohnen.

Soweit so gut.

Was kann die Bash denn nun?

Ich möchte mich hier nicht so viel an den grundlegenden Dingen aufhalten. Klar kann man for- und while-Schleifen machen, klar gibt es if then und else. Es gibt auch Funktionen, lokale Variablen und Übergabeparameter. Wen das interessiert kann es lieber nachlesen. Zum Beispiel hier.

Wichtig und besonders an der Shell ist jedoch, dass man die vielseitigen Programme, die das Linux-System zur Verfügung stellt, direkt am Lösen der Aufgabe beteiligen kann — und muss. Das eigentlich ist auch für mich das eigentlich Faszinierende: Der Rahmen eines Shell-Skripts wird meist von den erwähnten Schleifen und ifthenelse-Konstruktionen der Bash gestellt. Die Anweisungen bestehen aber meist aus Aufrufen von anderen Programmen wie ls, grep, awk, sed, rm oder ln.

to be continued

One comment on “Eine kleine bash-Fibel

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Posts by topic…
…by month
Have a look at…


%d bloggers like this: