Linux-Kompendium: Shellprogrammierung: Beispiele für Unix-Befehle

Aus Wikibooks

Wechseln zu: Navigation, Suche

Zurück zu Shellprogrammierung

Inhaltsverzeichnis

[Bearbeiten] Einfache Unix-Befehle

[Bearbeiten] ls

$ ls -l -d /tmp
drwxrwxrwt  16 root  wheel  1536 Dec 30 10:16 /tmp

Das ist ein einfacher Unix-Befehl (simple command). Die Shell ruft das Programm ls mit den Argumenten -l, -d und /tmp auf. Die Argumente, denen ein - vorangestellt ist, heißen im Unix-Jargon Optionen. /tmp ist keine Option. Das Programm ls ist so aufgebaut, dass

  • die Reihenfolge, in der die Optionen angegeben werden, unerheblich ist
  • mehrere Optionen zu einem Argument zusammengefasst werden können
  • die Optionen aus nur einem Zeichen bestehen
  • die Optionen vor anderen Argumenten stehen müssen

Die Kommandos

  • ls -l -d /tmp
  • ls -d -l /tmp
  • ls -ld /tmp
  • ls -dl /tmp

sind also völlig gleichwertig.

[Bearbeiten] echo

$ echo hello world
hello world
$ echo       hello      world
hello world

Der echo-Befehl schreibt die nachfolgenden Zeichenketten aufs Terminal. Die Zeichenketten sind also die Argumente zum echo-Befehl. Jeweils zwei aufeinanderfolgende Argumente müssen durch mindestens ein Leerzeichen getrennt sein. Die Zeichenketten werden getrennt durch ein Leerzeichen ausgegeben.

[Bearbeiten] Variablen-Expansion

[Bearbeiten] Variablen belegen

Der Befehl

variable=zeichenkette

weist der Variablen variable den Wert zeichenkette zu. Eine Variable ist eine Zeichenkette, die mit einem Buchstaben oder Unterstrich (_) beginnt, auf den eine beliebig lange Folge von Buchstaben, Ziffern und Unterstrichen folgt.

$ H=hello
$ L=' '
$ W=world
$ echo $H$L$W
hello world
$ echo hello$L$W
hello world
$ echo $H$Lworld
hello world
$ echo $H${L}world
hello world

Hier werden den Variablen H, L und W Zeichenketten zugewiesen. Der Variablen L wird hier ein Leerzeichen zugeordnet. Die einfachen Hochkommas ist notwendig, der Variablen wird aber nur die Zeichenkette zwischen den beiden Hochkommas zugeordnet.

[Bearbeiten] Die PATH-Variable

Die $PATH-Variable enthält die Pfade, in denen bei der Eingabe eines Befehls gesucht werden soll.

$ echo $PATH
/usr/local/bin:/usr/X11R6/bin:/usr/games:/usr/bin:/bin:/usr/sbin:/sbin

Gibt man also den Befehl meinprogramm ein, so wird an folgenden Stellen der Reihe nach geschaut, ob das Programm vorhanden ist:

  • /usr/local/bin/meinprogramm
  • /usr/X11R6/bin/meinprogramm
  • /usr/games/meinprogramm
  • /usr/bin/meinprogramm
  • /bin/meinprogramm
  • /usr/sbin/meinprogramm
  • /sbin/meinprogramm

Sobald an einer dieser Stellen das Programm existiert, wird es ausgeführt.

[Bearbeiten] Leere Variablen

Das Ausgeben einer nicht gesetzten Variable führt nicht zu einem Fehler, sondern einfacher zu einer Leerzeile:

$ echo $UNSET_VARIABLE

$

[Bearbeiten] Die HOME-Variable

In der Variable $HOME ist das Heimatverzeichnis des aktuellen Benutzers gespeichert:

$ echo $HOME
/home/guenter

Ein Aufruf von cd (change directory) ohne Parameter führt zu einem Wechseln ins in $HOME angebene Verzeichnis:

$ cd
$ pwd
/home/guenter
$ HOME=/tmp
$ cd
$ pwd
/tmp

[Bearbeiten] Tilde-Expansion

Eine Zeichenkette der Form ~name wird zum Heimatverzeichnis des Benutzers "name" expandiert:

$ echo Das HOME-Verzeichnis von guenter ist ~guenter
Das HOME-Verzeichnis von guenter ist /home/guenter

Sollte dieser Benutzer nicht existieren (wie im folgenden Beispiel), bleibt es bei der angegebenen Zeichenkette:

$ echo Das HOME-Verzeichnis von ~xyz654 ist ~xyz654
Das HOME-Verzeichnis von ~xyz654 ist ~xyz654

[Bearbeiten] Verkettung von Befehlen

Der echo-Befehl kann auch eine Zeichenkette mit der Ausgabe eines anderen Befehls verbinden. Dieser andere Befehl wird dann in Backticks (``) angegeben, wie hier der date-Befehl:

$ echo "Heute haben wir `date '+ %A, %Y-%m-%d %H:%M:%S'`"
Heute haben wir Sunday, 2007-12-30 11:04:40

Die Ausgabe eines Befehls kann über eine sogeannte Pipe (|) als Eingabe an einen anderen Befehl weitergereicht werden:

$ cut -d: -f 7 /etc/passwd | grep '^/bin/' | sort | uniq -c
1135 /bin/bash
1965 /bin/csh
   5 /bin/false
 198 /bin/ksh
 442 /bin/sh
 333 /bin/tcsh
   1 /bin/true
  21 /bin/zsh

Der time-Befehl misst die Zeit, die ein ander Befehl für die Ausführung benötigt:

time (let I=1000; while ((I>0)); do ((I-=1)); echo $I>/dev/null; done;); \
> time (let I=1000; while ((I>0)); do ((I-=1)); /bin/echo $I>/dev/null; done;)
    0m0.02s real     0m0.03s user     0m0.00s system
    0m8.07s real     0m0.09s user     0m1.03s system
Persönliche Werkzeuge