Die Kornshell ist eine Weiterentwicklung der Bourne Shell mit höherem
Komfort. So kennt sie Aliase und die Jobverwaltung mit jobs, bg und fg.
Beim Start werden die Dateien /etc/profile und die Datei
.profile aus dem Heimatverzeichnis gestartet.
Beginnt ein Verzeichnis mit einer Tilde ~, so wird diese durch den Pfad
des Heimatverzeichnisses ersetzt. ~/test wird die Shell zu
/home/arnold/test auflösen, wenn das Heimatverzeichnis
/home/arnold ist.
Durch zweimaliges Tippen der ESC-Taste versucht die Kornshell, den Datei- oder
Pfadnamen des angefangenen Wortes anhand der erreichbaren Datei- bzw.
Verzeichnissnamen zu vervollständigen.
Das Größerzeichen leitet die Standardausgabe (stdout) auf eine Datei um.
Die Umleitung
der Standardfehlerausgabe (stderr) erfolgt, indem eine 2 vor das Größerzeichen
gesetzt wird. Sollen stdout und stderr in die gleiche Datei umgeleitet werden,
wird 2>&1 verwendet.
[Umleitungen]L|L
Befehl & Wirkung
cc haus.c > out & Umleitung der Standardausgabe, Fehler am Terminal
cc haus.c 2> out & Umleitung der Fehler, Standardausgabe am Terminal
cc haus.c 2>&1 out & Umleitung der Ausgabe und der Fehler nach out
Der Befehl
export dient dazu, Variablen an Nachfolgeprogramme weiterzugeben.
Variablen werden für die aktuelle Shell definiert. Wird ein Programm von der
Shell aus gestartet, werden die Variablen nicht weitergegeben. Das kann
besonders lästig sein, wenn die Variablen eigentlich das Verhalten des
gestarteten Programms ändern sollen. Damit die Variable und ihre Inhalte
an alle Kindprozesse weitergegeben werden, muss die Variable exportiert
werden. Als Beispiel dient ein Programm, das über die Variable DATA den
Pfad und Dateinamen seiner Daten übermittelt bekommt.
gaston> DATA=/home/arnold/my/database
gaston> export DATA
gaston> auswertung
Die Kornshell kann mathematische Ausdrücke berechnen und in Variablen ablegen.
Dazu stellt man den Befehl let einer Variablenzuweisung voran.
Als Operanden können +, -, *, / und % (als Modulo) verwendet werden. Auch
Klammern
werden korrekt interpretiert. Es darf allerdings kein Leerzeichen in dem
Ausdruck stehen. Besonders praktisch ist die Fähigkeit, mit verschiedenen
Zahlensystemen zu arbeiten. Dazu wird einer Zahl die Basis, gefolgt von einem
Hashzeichen (#), vorangestellt. Die Dualzahl 2#11 entspricht einer dezimalen
3, und um die Hexadezimalzahl 1a darzustellen, wird 16#1a oder 16#1A
verwendet. Beispiel:
gaston> let wert=45+5
gaston> echo $wert
50
gaston> wert=45+5
gaston> echo $wert
45+5
gaston> let wert=16%5
gaston> echo $wert
1
gaston> let wert=(1+3)*2
gaston> echo $wert
8
gaston> let wert=16#1a
gaston> echo $wert
26
gaston>
Im Beispiel ist zu sehen, dass ohne die Verwendung von let die
Variable den Ausdruck als Text übernimmt. Die Kornshell kennt auch
Modulorechnung und Klammern. In den letzten beiden Beispielen wird die
Umrechnung von hexadezimalen Werten demonstriert.
Die Kornshell merkt sich standardmäßig die letzten 128 Kommandos in der Datei
.sh_history des Heimatverzeichnisses.
Die Bearbeitung der Kommandos erfolgt mit dem Befehl fc .
Ohne weitere Parameter aufgerufen, startet fc den Systemeditor
(meist vi). Darin findet sich das zuletzt eingegebene Kommando. Im Editor kann
man das Kommando verändern und speichern. Dadurch wird die geänderte Version
ausgeführt.
Wird als Argument von fc eine Zeichenkette angegeben, wird der letzte
Befehl in den Editor geladen, der mit dieser Zeichenkette beginnt.
Mit der Option -e kann ein Kommando direkt verändert werden, ohne den Editor
zu belästigen. Wieder kann
mit dem Argument nach der letzten Zeile gesucht werden, die mit dieser Zeichenkette beginnt. Mit einer Zuweisung kann ein Teilstring dieses Kommandos
ersetzt werden. In der Praxis sieht das so aus:
gaston> let wert=16#1A
gaston> echo $wert
26
gaston> fc -e -
echo $wert
26
gaston> fc -e - 1A=22 let
let wert=16#22
gaston>
Im letzten fc wird das letzte Kommando gesucht, das mit »let«
beginnt und innerhalb des Kommandos die Zeichenkette 1A durch 22 ersetzt.
Mit Erleichterung werden Sie zur Kenntnis nehmen, dass Sie, anstatt
mit fc zu arbeiten, die Editierkommandos des vi
auf die Kommandoebene holen können. Der folgende Befehl schaltet dies ein:
set -o vi
Danach schaltet die ESC-Taste in den Editiermodus um. Man kann nun mit
+ und - die vergangenen Zeilen wieder heranziehen, bis man zu dem Befehl
gelangt, den man ausführen möchte. Man kann sogar mit
dem Schrägstrich in den bisherigen Kommandos suchen.
Hat man den gewünschten Befehl gefunden, kann man ihn noch modifizieren.
Innerhalb der Zeile kann man mit i einfügen und mit d löschen. Das
Bewegen innerhalb der Zeile funktioniert mit der Leertaste und dem Backspace,
aber auch wortweise mit w und b. Wer mit dem vi umgehen kann, wird
sich wohlfühlen.
set -o emacs
Die Benutzer des emacs werden sich schon gedacht haben, dass man auch dessen
Kommandos zur Bearbeitung der History verwenden kann. Wichtig sind vor allem
die folgenden Befehle:
[emacs-Kommandotasten]L|L
Taste & Funktion
ctrl-P & zeilenweises Rückwärtsblättern der Kommandos
ctrl-N & zeilenweises Vorwärtsblättern der Kommandos
ctrl-B & mit dem Cursor nach links
ctrl-F & mit dem Cursor nach rechts
ctrl-A & an den Anfang der Zeile
ctrl-E & an das Ende der Zeile
ctrl-D & löscht das Zeichen unter dem Cursor
ctrl-K & lösche bis an das Ende der Zeile
ctrl-R & inkrementelles Suchen
|