# Eingebaute Kommandos der Bash

`alias` | Definiert Abkürzungen für ein Kommando
`basename` | Liefert den Dateinamen des übergebenen Pfades. Beispiel
    user@sonne> basename /home/user/linux.ps
    linux.ps
    user@sonne> basename /home/user/linux.ps ps
    linux.
`break [n]` | Bricht Schleifen vorzeitig ab, durch Angabe eines Zahlenwertes `n` wird mit erster Anweisung nach der n-ten Schleifenebene fortgefahren.
`case` | Bedingte Mehrfachverzweigung. Es findet ein Mustervergleich zwischen Zeichenketten statt. Die Anweisungen nach dem ersten übereinstimmenden Muster bis zum Auftreten von `;;` werden ausgeführt. Mehrere Muster können durch `|` zusammengefasst werden. Beispiel
    case $i in
      muster1 | muster2 ) kommando1;
                          kommando2;;
      muster3           ) kommando;;
      ...
    esac
`cat << ende` | Liest aus aktueller Datei bis zum Auftreten der Zeichenkette ``ende''.
`continue [n]` | Fährt mit Ausführung des nächsten Schleifendurchlaufs fort; der optionale Parameter `n` dient zum Sprung in eine äußere Schleifenebene.
`declare` | Weist einer Shellvariablen einen neuen Wert zu oder ändert ihre Eigenschaften. Beispiel
    # Variable darf nur gelesen werden:
    declare -r PATH
    # Variable ist global definiert:
    declare -x global=5
`dialog` | Zur Anzeige von Dialogen.
Optionen
`--clear` | Entfernt Dialog nach dessen Ende vom Bildschirm.
`--title text` | Zeigt `text` als Dialogtitel an.
`--msgbox text x y` | Zeigt `text` an, der mit <Enter> bestätigt werden muss. x gibt die Höhe und y die Breite an.
`--infobox text x y` | Zeigt `text` an, ohne Bestätigung.
`--yesno text x y` | Ja/Nein - Entscheidungsbox.
`--inputbox text x y` | Eingabe einer Textzeile.
`--textbox datei x y` | Ausgabe des Dateiinhalts.
`--checklist text x y` | Auswahl mehrerer Optionen.
`dirname` | Pfadname eines vollständigen Dateinamens.
`dirs` | Liste der durch `pushd` gespeicherten Verzeichnisse.
`echo` | Ausgabe einer Zeichenkette auf dem Bildschirm.
`eval $var` | Interpretiert Variableninhalt als Kommandozeile und führt diese aus (inklusive Substitution): Beispiel
    user@sonne> homepwd="cd ; pwd"
    user@sonne> $homepwd
    bash: cd;: command not found
    user@sonne> eval $homepwd
    /home/user
`exec` | Startet ein angebenes Kommando.
`exit` | Beendet ein Shell-Programm, ein Rückgabewert kann angegeben werden.
`export` | Deklariert eine globale Variable, mit Option `-n` wird eine Umgebungsvariable wieder zu einer normalen Shellvariablen.
`expr` | Dient zur Auswertung arithmetischer Ausdrücke oder zum Vergleich von Zeichenketten. Als Ergebnis liefert `expr` entweder die Anzahl der Zeichen zurück, die dem Muster entsprechen, oder, falls Teile des Musters in `\(...\)` eingeschlossen sind, die passende Zeichenkette. Beispiel
    user@sonne> expr abcdefghi : a.g
    7
    user@sonne> expr abc_egf_hij : ´.*_\(.*\)_.*´
    efg
`file` | Versucht den Dateityp der übergebenen Datei zu bestimmen, mit Option `-z` wird versucht, den Typ einer komprimierten Datei zu erkennen.
`for` | Bildet eine Schleife "uber eine Liste von Zeichenketten: Beispiel
    for i in a b c; do
        echo $i
    done
Wird `for` innerhalb eines Shellprogrammes ohne `in` aufgerufen, wird die Variable mit der Liste der dem Programm übergebenen Parameter verbunden.
`function name()` | Definiert eine Funktion.
`if ...; then` | Bedingte Verzweigung, der jeweilige Block wird nur ausgeführt, wenn die Bedingung erfüllt ist. Bedingungen können verschachtelt werden, ein optionaler `else`-Zweig wird behandelt, wenn keine Bedingung zutrifft. Beispiel
    if bedingung; then
       kommandos
    elif bedingung; then
       kommandos
    else
       kommandos
    fi
`local` | Definiert innerhalb einer Funktion eine lokale Variable: Beispiel
    function Beispiel() {
       local a
       local text="Beispiel"
       ...
    }
`popd` | Wechselt in das zuletzt in `pushd` gespeicherte Verzeichnis.
`printf` | Formatierte Ausgaben ähnlich zu C (man -S 3 printf).
`pushd` | Speichert aktuelles Verzeichnis und wechselt in ein angegebenes Verzeichnis.
`pwd` | Print Working Directory; zeigt den aktuellen Verzeichnispfad an.
`read` | Zur Eingabe von Text.
`readonly` | Zeigt die schreibgeschützten Variablen der Shell an.
`setterm` | Ändern der Einstellungen des Terminals.
`shift [n]` | Verschiebt die Liste der Parameter um `n` Einträge. Das Kommando ist notwendig, wenn einem Shellprogramm mehr als 10 Parameter übergeben werden.
`shopt` | Dient zum Anzeigen/Ändern der Shelloptionen. Durch diese kann das Verhalten der Bash gesteuert werden. Zum Beispiel lässt sich die Unterscheidung der Groß- und Kleinschreibung durch Aktivieren der Shelloption `nocaseglob` abschalten:
    user@sonne> shopt -s nocaseglob
    user@sonne> ls b*
    Bild1.gif         Buch.tar.gz  bla.pnm

    # Rücksetzen der Shelloption
    user@sonne> shopt -u nocaseglob
`sleep n` | Programm ``schläft'' für n Sekunden.
`source` | Führt angegebene Datei aus, als würde sie im Programmtext stehen (analog zu ``include'' in C).
`test` | Dient zur Formulierung von Bedingungen. `test` liefert ``0'', wenn Bedingung erfüllt ist, und ``1'' sonst. Eine alternative Schreibweise ist `[ ausdruck ]`.
Zeichenkettenvergleiche
`[ zk ]` | 0, wenn Zeichenkette zk nicht leer ist.
`[ -z zk ]` | 0, wenn Zeichenkette zk leer ist.
`[ zk1 = zk2 ]` | 0, wenn Zeichenketten übereinstimmen.
`[ zk1 != zk2 ]` | 1, wenn Zeichenketten übereinstimmen.
Für zwei Zahlen existieren folgende Vergleiche
`-eq` | gleich
`-ne` | ungleich
`-gt` | größer als
`-ge` | größer gleich
`-lt` | kleiner als
`-le` | kleiner gleich
Eigenschaften von Dateien können getestet werden:
`[ -d datei ]` | 0, wenn `datei` ein Verzeichnis ist.
`[ -e datei ]` | 0, wenn `datei` existiert.
`[ -f datei ]` | 0, wenn `datei` eine ``normale'' Datei ist.
`[ -L datei ]` | 0, wenn `datei` ein symbolischer Link ist.
`[ -r datei ]` | 0, wenn `datei` gelesen werden kann.
`[ -w datei ]` | 0, wenn `datei` geschrieben werden kann.
`[ -x datei ]` | 0, wenn `datei` ausgeführt werden kann.
Bedingungen lassen sich verknüpfen:
`[ !bed ]` | 0, wenn Bedingung nicht erfüllt ist.
`[ bed1 -a bed2 ]` | 0, wenn beide Bedingungen erfüllt sind.
`[ bed1 -o bed2 ]` | 0, wenn mind. eine Bedingung erfüllt ist.
`trap` | Führt ein Kommando in Abhängigkeit eines aufgetretenen Signals aus: `trap $(echo "SIGHUP") 1` - erzeugt die Ausgabe, falls das Signal ``SIGHUP'' aufgetreten ist. `trap -l` - listet alle bekannten Signale auf.
`ulimit` | Begrenzt die verfügbaren Systemressourcen. `ulimit -d 4096`- Der Prozess darf maximal 4k für sein Datensegment verwenden.
`unalias` | Entfernt einen Alias.
`unset` | Löscht eine Variable.
`until` | Bedingte Ausführung einer Schleife.
    until bedingung; do
      kommandos
    done
`wait [nr]` | Wartet auf Terminierung des angegebenen Hintergrundprozesses. Ohne Angabe von `nr` wird auf alle Hintergrundprozesse gewartet.
`while` | Bedingte Ausführung einer Schleife.
    while bedingung; do
      kommandos
    done