Eingabe von Kommandos |
Der Aufbau eines Kommandos |
Der grundlegende Aufbau (nach weit verbreiteter Syntax) eines Kommandos sollte wie folgt aussehen:
Kommandoname [-Optionen] [Argumente...] |
Optionen werden hierbei mittels »-« eingeleitet und bestehen zumeist aus nur einem Buchstaben. Mehrere Optionen können gruppiert werden:
user@sonne> ls -la |
Dem Kommando können beliebig viele Argumente übergeben werden. Meist können Optionen und Argumente in ihrer Reihenfolge vertauscht werden.
user@sonne> ps -ef |
Das führende Minus zur Einleitung von Optionen ist gemäß dem Unix98-Standard. Einige Kommandos (wie ps, tar,...) verwenden darüber hinaus auch Optionen nach der BSD-Syntax, nach der kein führendes Minus vorgeschrieben ist:
user@sonne> ps ax |
Ebenfalls Verwendung finden oft die GNU-Regeln für lange Optionen, die durch zwei führende Minus-Zeichen eingeleitet werden.
user@sonne> ps --sort tty |
Interpretation der Kommandozeile |
Bevor ein Kommando zur Ausführung gebracht wird, interpretiert die Bash die ihr übergebene Kommandozeile. Die Shell parst dazu die Eingabe und sucht nach Zeichen(folgen) mit Sonderbedeutungen. Anschließend versucht die Bash, diese Zeichenketten zu substituieren. Die Reihenfolge der Betrachtung der Argumente spielt für das Verständnis der Arbeitsweise der Bash eine große Rolle.
Im Abschnitt Shells, Bash findet der interessierte Leser eine detaillierte Diskussion zum Parsen der Kommandozeile. Die hiesigen Beispiele beschränken sich auf das Wesentliche, was allerdings den Alltag der meisten Linux-Anwendern bereits abdecken sollte.
Metazeichen |
Unter Metazeichen fasst man diejenigen Sonderzeichen einer Shell zusammen, die als Platzhalter für Zeichenmuster stehen.
In der Bash stehen folgende Sonderzeichen für:
?
Genau ein beliebiges Zeichen
*
Beliebig viele (auch 0) beliebige Zeichen
[def]
Eines der Zeichen
[^czx]
Keines der angegebenen Zeichen
[!czx]
Wie oben
[a-f]
Alle Zeichen aus dem Bereich
Steht für das Heimatverzeichnis
\
Hebt die Sonderbedeutung des nachfolgenden Zeichens auf
"..."
Hebt die Sonderbedeutung des Leerzeichens und Tabulators der eingeschlossenen Zeichenfolge auf (die Zeichenfolge wird als ein Wort betrachtet)
'...'
Hebt alle Sonderbedeutungen der eingeschlossenen Zeichenfolge auf
Ein Metazeichen wird niemals vom jeweiligen Kommando interpretiert, sondern immer von der Shell. Aus diesem Grund funktioniert ein Kommando wie
user@sonne> cp *.x *.y |
unter einer Unix -Shell nicht.
Beispiele |
Die Arbeitsweise der Bash lässt sich anhand von Beispielen verdeutlichen:
user@sonne> ls /boot/*.map /boot/System.map |
Der Stern »*« steht für beliebig viele beliebige Zeichen. D.h. in obiger Eingabe substituiert die Bash die Eingabe durch alle Dateinamen, die im Verzeichnis /boot liegen und auf ».map« enden.
user@sonne> ls -d /?[abc]* /sbin /var |
Die Bash ersetzt die Eingabe durch alle Dateinamen aus dem Wurzelverzeichnis, deren erstes Zeichen beliebig ist (?), deren zweiter Buchstabe entweder ein »a«, ein »b« oder ein »c« ist, gefolgt von beliebig vielen (auch 0) beliebigen Zeichen "*". Die Option »-d« des Kommandos »ls« bewirkt, dass bei Verzeichnissen nur deren Namen, nicht deren Inhalt aufgelistet wird.
user@sonne> ls /?[abc]* /sbin: SuSEconfig fsck.minix ldconfig rmmod YaST genksyms lilo route ... /var: X11R6 cron lock named spool texfonts adm games log openwin squid tmp ... |
...ohne die Option "-d" kann die Ausgabe schnell verwirren.
user@sonne> echo "Willkommen $USER" Willkommen user user@sonne> echo 'Willkommen $USER' Willkommen $USER |
USER ist eine vordefinierte Shellvariable, die das Benutzerkennzeichen des
angemeldeten Benutzers enthält. Wird das Argument von echo mit doppelten
Anführungsstrichen »gequotet«, so wird zwar das enthaltene Leerzeichen
ignoriert, nicht aber das $-Zeichen, das hier den Inhalt der Variable USER
abruft.
Beim Einschließen in einfache Anführungsstriche wird die Sonderbedeutung
jedes Zeichens aufgehoben, also auch die enthaltene Variablensubstitution.