Samstag, 11. Oktober 2008

entwickler.com Magazine Konferenzen Entwickler Akademie Entwickler-Forum Jobbörse Bücher
Software & Support Verlag

Die Bash: Handarbeit ist angesagt

Dieser Beitrag bietet eine bunte Mischung zum Thema Bash, um die Vielseitigkeit dieser Shell zu zeigen. Zwar werden Distributionen wie Suse mit jeder neuen Version „benutzer-freundlicher“ (Windows lässt grüssen); doch dass bedeutet noch lange nicht, dass die Kommandozeile jetzt überflüssig ist. Im Gegenteil, hin und wieder müssen Anpassungen vorgenommen werden, die sich nur auf diesem Wege bewerkstelligen lassen.
Die Bash (Bourne Again Shell, benannt nach ihrem ursprünglichen Entwickler Bourne) ist die unter Linux am häufigsten genutzte Shell. Ausserdem stehen weitere Shells zur Verfügung: die C-Shells csh/tcsh, die Korn-Shell ksh und die zsh. Welche Shells das System bereitstellt, enthüllt chsh -l:


ich@meinrechner> chsh -l
/bin/ash
/bin/bash
/bin/bash1
/bin/csh
...

Falls Sie neugierig sind, welche Bash-Version an Bord ist: die Tastenkombination STRG+x STRG+v hilft weiter. Die Ausgabe sollte so aussehen:

GNU bash, version 3.00.16(1)-release (i586-suse-linux)

Die Bash wird unter anderem mit Hilfe vorbelegter Environment-Variablen konfiguriert. Diese Variablen fördert wiederum der Befehl env, beziehungsweise printenv, zutage. Verwenden Sie den Pager less, da die Ausgabe lang ist: env | less.
Falls Sie wissen möchten, welche Verzeichnisse im Pfad stehen, geben Sie echo ein (um den Wert einer Environment-Variable zu erhalten, muss der Variable das Dollar-Zeichen vorangestellt werden). Auch diese Variante funktioniert: env .

Im Kontext der Shell-Programmierung spielen die sogenannten positional parameters eine wichtige Rolle. Wer mit Perl oder C vertraut ist, wird prinzipiell wissen, worum es geht. Falls nicht: positional parameters stellen Kommandozeilen-Argumente, in der Reihenfolge ihres Auftretens, bereit. Als Bezeichner dienen die Ziffern 1, 2, 3 etc., diesen Variablen wird ebenfalls das Dollarzeichen vorangestellt, um an den den Wert zu gelangen (, , etc.). Ausserdem gibt es den Bezeichner 0, welcher den Skript-Namen enthält.
Als wäre das nicht genug, werden weitere Symbole verwendet: @ und # (wieder in Kombination mit ). Ein einfaches Beispiel soll das Gesagte verdeutlichen:

echo "Willkommen @"
echo "Programm-Name: , eingegebene Parameter "
echo " Parameter"

Speichern Sie diese Zeilen als Datei gruss ab. Achtung: das Skript muss ausführbar sein (chmod 755 gruss).
Die erste Zeile liefert alle Parameter, da @ als Container für sämtliche positional parameters dient. Die zweite Zeile liefert hingegen den Skript-Namen (), dann nacheinander die übergebenen Parameter ( und ) und gibt schließlich die Anzahl der übergebenen Parameter zurück. Das Aufrufschema:

gruss Thomas Kaufmann

Und das Ergebnis:

Willkommen Thomas Kaufmann
Programm-Name: ./gruss, eingegebene Parameter Thomas Kaufmann
2 Parameter

Themenwechsel. Natürlich bietet die Bash auch vorgefertigte Funktionalität wie das bereits erwähnte Kommando tee. Ein Beispiel:

ps axjf | tee proc_tree

Die Ausgaben von ps (process status) fallen meistens länger aus, insofern hilft tee einerseits dabei, die Ausgabe sofort zu sehen; und andererseits speichert das Kommando das Resultat in die Datei proc_tree. Desweiteren ist tee in der Lage, durch den Schalter a (für append=anhängen), Ausgaben an Datei-Inhalte anzuhängen (es geht also nichts verloren):

ls -laht | tee -a proc_tree

Der Befehl top ist ebenfalls wichtig und zeigt, was sich momentan auf der Maschine abspielt. Geben Sie top auf der Kommandozeile ein und Sie erhalten eine Übersicht über die laufenden Prozesse (also die in der Ausführung befindlichen Programme). Wenn Sie nur Prozesse eines bestimmten Anwenders sehen möchten, geben Sie top -u username ein. Sie können das Monitoring anpassen während top aktiv ist. Drücken Sie die u-Taste und geben Sie am Prompt den User ein.
Last not least muss der Editor vim erwähnt werden (er ist unter Linux standardmäßig installiert). Warum? Nun, falls Sie mal keinen mc (GNU Midnight Commander) zur Verfügung haben, können Sie vim durchaus als Ersatz verwenden. Einfach vim auf der Shell starten und Folgendes eingeben:

:Sexplore

Daraufhin teilt sich das Fenster. Wenn Sie das ganze Fenster für den Explorer benötigen, geben Sie STRG+W o ein. Falls Sie in ein Verzeichnis der höheren Ebene gelangen möchten, drücken Sie die Minus-Taste (-). Durch die Eingabe von i (der kleine Buchstabe i) erhalten Sie detaillierte Angaben zu Dateien und Verzeichnissen. Mit ZZ (zweimal den Gross-Buchstaben Z drücken) verlassen Sie vim.

Thomas Kaufmann







Software & Support Verlag GmbH