falls irgendwas nur mit der bash, aber nicht mit der ash laufen sollte, dann als solches kennzeichnen!

Eingaben/Ausgaben

>DATEI
Standard-Ausgabe (1) in DATEI schreiben
1>DATEI
dito
>>DATEI
Standard-Ausgabe (1) an DATEI anhaengen
2>DATEI
Fehler-Ausgabe (2) in DATEI schreiben
&>DATEI
Standard- und Fehlerausgabe in Datei schreiben
<DATEI
Standard-Input aus DATEI lesen
N<DATEI
DATEI mit dem Datei-Deskriptor Nummer N als nur-lese verknuepfen
N>DATEI
DATEI mit dem Datei-Deskriptor Nummer N als nur-schreiben verknuepfen
N<>DATEI
DATEI fuer schreib/lese-Zugriffe als Nummer N oeffnen
N<< TRENNER
der folgende Text bis zum Auftreten einer Zeile, in der nur TRENNER steht, wird als Eingabestrom verwendet
N<<- TRENNER
dito - fuehrende Tabulatoren werden jedoch ignoriert
  • als DATEI kann auch immer "&N" (mit N als Zahl) verwendet werden, um eine Kopie des entsprechenden Datei-Deskriptors zu verwenden (also "2>&1" lenkt die Fehlerausgabe auf die Standard-Ausgabe um)

  • "&-" als DATEI schliesst den angegebenen Strom

  • Befehls-Verkettungen

    ||
    ODER - fuehrt das folgende Kommando nur aus, wenn das erste nicht mit Fehlercode 0 beendet wurde
    &&
    UND - nur, falls das erste Kommando erfolgreich war
    die Kommandos werden nacheinander ausgefuehrt
    &
    das Programm wird im Hintergrund ausgefuehrt
    { BEFEHLE; }
    fuehrt die Befehle in der aktuellen Shell aus (Vorsicht - falls durch eine UND-/ODER-Verknuepfung die schliessende Klammer uebersprungen wird, fuehrt das zu irritierenden Fehlermeldungen)
    (BEFEHLE)
    fuehrt die Befehle in einer neuen Shell aus (also werden keine Variablen der aktuellen Shell veraendert usw.)

    Anfuehrungsstriche

    doppelte
    Variablen und rueckwaertige Anfuehrungsstriche (Backticks) werden aufgeloest
    einfache
    beides wird nicht aufgeloest
    rueckwaertige

    der Text wird als Kommando interpretiert und liefert dessen Ausgabe zurueck (z.B.: DATEIEN=ls /tmp/)

    Strukturen

    while

    while BEDINGUNG        do      BEFEHL                BEFEHL   done

    until

    siehe "while" - einfach "until" stattdessen einsetzen

    for

    for VAR in LISTE        do      BEFEHL                BEFEHL   done

    if

    if BEDINGUNG        then    BEFEHL                BEFEHL        else    BEFEHL                BEFEHL   fi

    case

    case $VARIABLE in        a|b )                BEFEHL                BEFEHL                ;;        c )                BEFEHL                ;;        * )                BEFEHL                ;;   esac

    Variablen-Substitution

    ${var}
    die Variable

    ${var<nowiki>::</nowiki>-default}: falls die Variable nicht gesetzt ist, wird der dafault-Wert zurueckgegeben ${var<nowiki>::</nowiki>=default}: falls die Variable nicht gesetzt ist, wird ihr der default-Wert zugewiesen ${var<nowiki>::</nowiki>?[meldung]}: falls die Variable nicht gestzt ist, wird "meldung" (oder ein Standard-Text) an Standard-Error ausgegeben und das Skript mit Fehlercode beendet - ansonsten wird der Variablenwert zurueckgegeben ${var::+alternative}: falls die Variable gesetzt ist, wird "alternative" zurueckgegeben, ansonsten der Wert der Variable (also null (leer))

    Anmerkung zu den vorherigen Beschreibungen:

    Berechnungen

    mit $((formel)) koennen einfache arithmetische Operationen ausgefuehrt werden

    wichtige Shell-Variablen

    $1 .. $9
    die Parameter beim Skript-Aufruf (koennen mit "shift" weitergeschoben werden, um an die folgenden Parameter zu gelangen)
    $0
    der Name des Shell-Skripts
    $*
    alle Parameter der Shell
    $@
    so aehnlich, wie "$*"
    $#
    die Anzahl der Parameter
    $?
    Exit-Code der letzten Pipeline bzw. des letzten (Vordergrund-)Kommandos
    $!
    Exit-Code der letzten Pipeline bzw. des letzten (Hintergrund-)Kommandos
    $$
    die pid des Skripts

    wichtige builtins

    . DATEI
    liest DATEI ein und fuehrt die folgenden Zeilen in der aktuellen Shell aus (wichtig, um die Variablen der aktuellen Shell beeinflussen zu koennen)
    eval STRING
    wertet STRING aus und fuehrt die ergebende Zeichenkette aus
    read [-p TEXT] VAR
    gibt eventuell TEXT aus und wartet auf eine Eingabezeile von Standard-Input - diese wird VAR zugewiesen
    set
    Shell-Optionen setzen
    -x
    jede Skript-Zeile (nach Variablenexpansion usw.) ausgeben, bevor sie ausgefuehrt wird
    -u
    falls eine verwendete Variable nicht gesetzt ist, dann beende das Skript mit Fehler (schuetzt vor Tipp-Fehlern)
    -e

    Skript sofort abbrechen, falls ein Kommando mit Fehler beendet wurde (gilt nicht fuer test, if, "||"-Verkettungen usw.)

    shift [n]

    rueckt die aktuellen Parameter ($1 usw.) um "n" weiter

    test
    RTFM
    trap AKTION SIGNALE
    fuehrt AKTION (in einfachen Anfuehrungsstrichen) aus, wenn das Programm eins der angegebenen Signale empfaengt; die Signale koennen als Zahlen oder per Name angesprochen werden; "0" bedeutet Skript-Ende
    exit [X]
    beendet das Skript und gibt den Exit-Code X (bzw. 0) zurueck

    Funktionen

    name () BEFEHL

    Unterschiede von asb/bash

    Bock auf mehr?

    Dann geh auf http://freshmeat.net/projects/advancedbashscriptingguide/?branch_id=130&release_id=159084


    Creative Commons Lizenzvertrag
    This page is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.