Auf dieser Seite arbeite ich an einer Beschreibung der bash. Sie ist in Anlehnung an die man-page entstanden und immer noch in Arbeit. Wann immer ich Zeit dazu habe, werden ich die Texte vervollständigen, erweitern und korrigieren. Ich kann mich natürlich nicht für die Vollständigkeit und Richtigkeit aller Beschreibungen verbürgen, da einem natürlich unweigerlich Fehler unterlaufen. Für Hinweise zu Fehlern, Ergänzungen und Lob bin ich jederzeit dankbar.
Der Begriff "Kommandointerpreter" wird der Sache vielleicht nicht ganz gerecht, denn die bash bietet neben der Möglichkeit Kommandos/Programm zu starten durch eine Reihe sehr mächtiger internen Kommandos und Funktionalitäten eine große Vielfalt von Einsatzmöglichkeiten. Nicht zuletzt ist eine möglichst genaue Kenntnis der Shell eine Grundvoraussetzung, um erfolgreich eigene Shell-Scripte zu schreiben.
Die bash ist einer der vielen Kommandointerpreter von LinuX. Sie ist shell (sh) kompatibel und auf vielen Systemen ist sh ein Link auf die bash. Die bash liest Kommandos von STDIN oder einem File und führt diese aus. Mit verschiedenen Optionen beim Start der bash wird ihr Verhalten grundsätzlich beeinflusst.
Je nachdem, wie die bash gestartet wird, ist ihr Verhalten unterschiedlich.
Wird die bash als interaktive login-shell gestartet, so testet sie zuerst, ob das File /etc/profile existiert. Sollte das der Fall sein, so wird es eingelesen und entsprechend ausgeführt. Danach testet die bash, ob im Homeverzeichnis des Users die Dateien .bash_profile, .bash_login und .profile existieren. Die erste dieser Dateien, die gefunden wird und lesbar ist, wird durch die bash eingelesen und ausgeführt. Alle folgenden Dateien werden nicht berücksichtigt. So wird z.B. der Inhalt der Datei .profile durch die login-shell nicht berücksichtigt, wenn gleichzeitig eine lesbare Datei .bash_profile im Homeverzeichnis angelegt ist. Dieses Verhalten kann mit der bash-Option --noprofile abgeschaltet werden.
Wenn die bash als interaktive nicht-login-shell gestartet wird, dann liest sie zuerst die Datei .bashrc aus dem Homeverzeichnis und führt sie aus, wenn sie existiert und lesbar ist. Mit der bash-Option --norc kann dieses Verhalten abgeschaltet werden. Mit der bash-Option --rcfile dateiname kann die bash veranlasst werden statt dessen die Datei dateiname einzulesen und auszuführen.
Wenn die bash als nicht-interaktive shell gestartet wird, so liest sie die Variable $BASH_ENV ein, expandiert die Werte und führt sie dann aus.
Wird die bash als /bin/sh aufgerufen, so berücksichtigt sie nur die Dateien /etc/profile und die Datei .profile im Homeverzeichnis.
Wird die bash als remote-shell (r-kommandos) aufgerufen, so liest sie nur die Datei .bashrc ein und führt sie aus.
Die reservierten Worte haben innerhalb der bash eine besondere Bedeutung und dürfen nicht frei verwendet werden, da sie besondere Funktionalitäten besitzen oder interne Kommandos auslösen. Diese Worte sind ! case do done elif else esac fi for function if in select then until while { } time [[ ]].
Einfache Kommandoaufrufe in der shell bestehen aus einer Abfolge von Zeichen, die gebildet werden aus dem Kommandonamen selbst und einer Reihe von optionalen Optionen und Parametern, die durch blanks voneinander getrennt sind.
Den Abschluss bildet ein control-operator.
Der Rückgabewert des Kommandos ist der entsprechende exit-status des Kommandos, oder ein Wert 128+n, wenn das Kommando durch das Signal n unterbrochen wurde.
command [optionen] [parameter]
Eine Pipeline ist eine Abfolge von einfachen Kommandos, die durch das Zeichen ¦ (Pipe) voneinander getrennt sind.
Beispiel:
Kommando1 ¦ Kommando2
oder
Kommando1 ¦ Komando2 ¦ Kommando3 ¦ .......
Der Standard-Output von Kommando1 wird dabei an den Standard-Input von Kommando2 weiter geleitet, usw.
Diese Verbindung wird hergestellt, noch bevor andere Umleitungen durch die bash vorgenommen werden.
Die bash wartet, bis die Ausführung des letzten Kommandos der Pipeline abgeschlossen wurde und gibt dann den exit-status des letzten Kommandos zurück.
Jedes Kommando der Pipeline wird in einem separaten Subshell-Prozess ausgeführt.
Eine Liste ist eine Abfolge von einer oder mehrerer Pipelines, die durch die Operatoren ; & && oder ¦¦ voneinander getrennt und mit ; & oder <newline> abgeschlossen werden.
Innerhalb der Liste haben die Operatoren && und ¦¦ haben den gleichen Rang.
Die Terminatoren ; und & besitzen ebenfalls einen gleichen, niederen Rang.
Sollen innerhalb einer Liste mehere Kommandos nacheinander ausgeführt werden, so sind sie durch ein Semikolon voneinander zu trennen. Also
Kommando1; Kommando2; ...
Wenn ein Kommando mit dem control operator & beendet wird, so wird es in einer Subshell im Hintergrund ausgeführt.
Die bash wartet dann nicht auf die Beendigung des Kommandos und gibt den return-code 0 zurück.
Wenn die Kommandos mit dem control operator ; beendet werden, so werden die Kommandos nacheinander ausgeführt und die bash wartet, bis ein Kommando beendet ist, bevor das nächste aus der Liste startet.
Der exit-code der Liste entspricht dem exit-code des letzten Kommandos.
Die control operatoren && und ¦¦ erzeugen eine logische Verknüpfung der Listenelemente.
In der AND-Form:
Kommando1 && Kommando2
wird Kommando2 nur dann ausgeführt, wenn Kommando1 vorher mit dem exit-status 0 (Null) beendet wurde.
In der OR-Form:
Kommando1 ¦¦ Komando2
wird Kommando2 nur ausgeführt, wenn Kommando1 mit einem exit-status ungleich 0 (Null) beendet wurde.
Die Liste wird in einer Subshell ausgeführt. Alle innerhalb der Subshell erzeugten Variablen haben nur auf diese Subshell selbst, oder eventuell von ihr erzeugte Subsubshells einen Effekt. Nach abarbeiten der Liste und beenden der Subshell geht ihr Inhalt verloren.
Die Listen wird in der Shell ausgeführt. Die geschweifte Klammer dient der Gruppierung von Listen. Sie muss mit einem Semikolon oder <newline> abgeschlossen werden. Der exit-status ist der exit-status der Liste. Zu beachten ist, dass es sich bei den Klammern {} im Gegensatz zu () um reservierte Worte handelt, die durch die bash auch als solche erkannt werden müssen, deshalb sind sie von der Liste liste durch Leerzeichen oder Tabulatoren zu trennen.
Die expression wird als arithmetischer Ausdruck interpretiert und in der selben Weise wie im Kommando let wird der Wert berechnet. Wenn das Ergebnis der Berechnung nicht Null ist, so wird der exit-status 0 (Null, wahr) zurückgegeben. Ansonsten ist der exit-status 1 (false). Eine Übersicht der verfügbaren Operatoren ist im Abschnitt Arithmetische Ausdrücke zu finden.
Die expression wird als Vergleichsausdruck interpretiert. Das Ergebnis des Vergleichs kann die Werte 0 (Null, wahr) oder 1 (falsch) annehmen. Eine Übersicht zu den Vergleichsoperatoren ist im Abschnitt Vergleichsoperatoren nachzulesen. Auf die expression wird die Tilde-Substitution, die Parameter- und Variablen-Expansion, die Arithmetik-Expansion, Kommando-Substitution und die Prozess-Substitution ausgeführt. Außerdem werden noch die Quotings entfernt. Auf expression wird kein "Word splitting" und keine Pfadnamen-Expansion angewendet. Bedingungen können mit den folgenden Operatoren kombiniert werden. Die Liste ist nach absteigender Rangfolge der Operatoren geordnet.
ACHTUNG!!!! Die Operatoren && und ¦¦ testen die Bedingung expression2 nicht, wenn nach dem Test der Bedingung1 der Wahrheitswert der gesamten Bedingung schon fest steht.
Mit diesem Konstrukt wird eine Zählschleife realisiert. Zuerst wird die Liste der Einträge word expandiert und erzeugt eine Liste von Werten. Diese müssen durch Leerzeichen getrennt sein. Bei jedem Schleifendurchlauf wird die Variable name mit dem nächsten Wert aus der Liste geladen und dann wird list ausgefürt. Der Rückgabewert entspricht dem exit-status des letzten Kommandos das ausgeführt wurde. Ergibt die Expansion der Liste hinter in eine leere Liste, so wird list nicht ausgeführt und der exit-status 0 zurückgegeben.
Mit diesem Konstrukt wird eine Zählschleife realisiert. Zuerst wird die Bedingung expr1 getestet. Wenn der Rückgabewert 0 (Null, zero, wahr) ist, wird die Bedingung expr2 getestet. Jedesmal, wenn die Bedingung expr2 den Rückgabewert >0 (nicht Null, non-zero, false) erzeugt, wird list ausgeführt und danach Bedingung expr3 getestet. Ansonsten wird die Schleife verlassen. Der Rückgabewert ist der exit-status der letzten Kommandos, das ausgeführt wurde.
If any expression is omitted, it behaves as if it evaluates to 1.Zuerst wird die Liste der Einträge word hinter in expandiert und erzeugt eine Liste von Einträgen. Diese Liste wird nach STDERR ausgegeben, wobei jeder Eintag der Liste zusammen mit einer Nummer in einer Zeile ausgegeben wird. Abschließend erscheint der PS3-Prompt und es wird eine Zeile von STDIN gelesen. Stimmt der eingelesene Wert mit einer der Nummern überein, dann wird die Variable name mit dem entsprechenden word geladen und list ausgeführt. Wurde nur eine Leerzeile von STDIN gelesen, so wird die Liste erneut auf STDERR ausgegeben und eine Zeile von STDIN gelesen. Wenn ein EOF (<Strg>+d) gelesen wird, so wird die Schleife sofort verlassen. Jeder andere von STDIN gelesene Wert läd die Variable name mit einem Nullstring und führt die liste aus. Die gelesenen Daten sind in der shell-Variable REPLY lesbar. Durch das Kommando break innerhalb der liste kann die Schleife ebenfalls beendet werden. Der exit-status des select Kommandos ist der exit-status des letzten Kommandos, das in liste ausgeführt wurde.
Als erstes wird word expandiert und dann mit den einzelnen pattern verglichen. Es gelten dabei die selben Regeln wie bei der Pfadnamen-Expansion. Bei einer Übereinstimmung wird die zugehörige liste ausgeführt. Danach wird die case-Anweisung verlassen, es wird nicht auf eine weitere Übereinstimmung getestet. Der exit-status der case-Anweisung entspricht dem exit-status des letzten ausgeführten Listenkommandos.
Mit diesem Konstukt kann eine bedingte Ausführung von Listen erzeugt werden.
Dabei funktioniert if ähnlich wie in anderen Programmiersprachen auch.
Der gesamte Block wird durch if .... fi geklammert.
Die Liste list1 wird ausgeführt und wenn diese einen exit-status 0 (Null) zurückgibt, dann wird die Liste list2 ausgeführt.
Wenn der exit-status der Liste list1 nicht Null sein sollte, so wird die Liste list2 nicht ausgeführt.
Danach wird der Test auf weitere elif-Statements durchgeführt.
Sollte also Liste list3 den exit-status Null zurückliefern, dann wird die Liste list4 ausgeführt usw, usf.
Ansonsten wird als Alternative Liste list5 nach der else-Anweisung ausgeführt.
Der exit-status entspricht dem exit-status des letzten ausgeführten Kommandos.
Eine Schachtelung von mehreren if-Blöcken ist möglich.
Das while-Kommando testet den exit-status der Liste list1. Wenn der exit-status 0 (Null, wahr) ist, wird die Liste list2 ausgeführt. Wenn der exit-status nicht Null ist, so wird die while-Schleife verlassen. Das until-Kommando ist das genaue Gegenteil. Das Kommando list2 wird solange ausgeführt, wie list1 einen exit-status ungleich Null zurückliefert. Wenn der exit-status 0 (Null, wahr) ist, wird die until-Schleife verlassen. Der exit-status der while und until-Schleife entspricht dem exit-status des letzten ausgeführten Kommandos der Listen.
Dieses Konstrukt definiert eine bash-Funktion mit dem Namen name, ähnlich einem Unterprogramm. Die Anweisungen der Funktion werden durch { ..... } geklammert. Diese Liste wird immer dann ausgeführt, wenn die Funktion innerhalb der bash mit ihrem Namen name aufgerufen wird. Der exit-status der Funktion entspricht dem exit-status des letzten in der Funktion ausgeführten Kommandos. (Siehe den Abschnitt Funktionen)
Das Kommentarzeichen der bash ist # (Doppelkreuz). Alle Worte einer Zeile, die auf # folgen, werden durch die bash ignoriert. Ob Kommentare erlaubt sind oder nicht, entscheidet die bash-Option interactive_comments. In der default-Einstellung ist die Option auf on eingestellt.
Quoting ist eine Methode, die besondere Bedeutung spezieller Zeichen und Worte in der shell zu deaktivieren. So kann zB. die besondere Bedeutung der metacharakter oder control operatoren unterbunden werden. Weiterhin ist es möglich, die Erkennung reservierte Worte oder die Expansion von Parametern zu verhindern. When the command history expansion facilities are being used, the history expansion character, usually !, must be quoted to prevent history expansion. Es gibt drei Arten des Quotings.
Ein nicht gequoteter backslash (\) ist der escape character. Der backslash hebt die Sonderbedeutung nur des folgenden Zeichens auf.
Sollen mehrere Zeichen gequotet werden, so ist jedem dieser Zeichen ein backslash voranzustellen.
Weiterhin können mit dem backslash auch nicht druckbare Zeichen erzeugt werden.
Weitere backslash escape-sequenzen sind:
\a | alert (bell) |
\b | backspace |
\e | escape character ESC 27 |
\f | form feed |
\n | new line |
\r | carriage return |
\t | horizontal tab |
\v | vertical tab |
\\ | backslash |
\' | single quote |
\nnn | Zeichencode in oktaler Kodierung |
\xHH | Zeichencode in hexadezimaler Kodierung |
\cx | control-x character |
Eine besondere Bedeutung hat ein gequotetes <newline>, also die Zeichenkombination \<newline>, wobei der backslash nicht selbst gequotet sein darf. Diese escape-Sequenz bewirkt eine Fortsetzung der Eingabezeile auf der nächsten Terminalzeile. Der gequotete backslash wird dabei aus dem Datenstrom entfernt und ist effektiv nicht vorhanden. Damit kann die Eingabezeile auf mehrere Terminalzeilen ausgedehnt werden.
Alle Zeichen und Worte, die zwischen den single quotes ' eingeschlossen sind, verlieren ihre Sonderbedeutung, ausgenommen der single-quote selbst. In einem mit single-quotes gequoteten string darf selbst kein single-quote enthalten sein.
Alle Zeichen und Worte, die zwischen den double quotes " eingeschlossen sind, verlieren ihre Sonderbedeutung, ausgenommen $,`, " und \. Die Zeichen $ und ` behalten ihre Bedeutung innerhalb der double quotes " bei. Der backslash wirkt mit seiner Sonderbedeutung nur noch, wenn er von einem der Zeichen $, `, ", \, or <newline> gefolgt wird. Innerhalb von double quotes müssen double quotes mit dem backslach gequotet werden. Die Parameter * und @ haben innerhalb der double quotes eine besondere Bedeutung. Die Ausdrücke der Form $'string' haben eine besondere Bedeutung.
Parameter sind Konstrukte zum speichern von Werten.
Parameter sind Variablen, die mit einem Namen referenziert werden.
Der gespeicherte Wert kann eine Zahl, ein String auch mit Sonderzeichen, oder auch ein Nullstring sein.
Der Parameter wird definiert, wenn ihm ein Wert zugeordnet wird.
Diesen Parametern können auch verschiedene Attribute bei der Deklaration verliehen werden.
Eine solche Variable wird durch folgende Anweisung angelegt:
name=[value]
Wenn kein Wert value angegeben wird, wird der Nullstring an die Variable übergeben.
Alle Werte value werden vor der Zuweisung der Tilde-, Parameter-, Variablen-, Arithmetikexpansion, der Kommandosubstitution und dem Entquoten unterzogen.
Die Positionsparameter werden mit einer oder mehreren Ziffernstellen, beginnend mit 1, bezeichnet. Beim Start eines shell-Skripts werden automatisch von der shell erzeugt und erlauben den Zugriff auf die Argumente, die dem Script beim Aufruf übergeben wurden. Nachdem die bash die Expansionen durchgeführt hat, werden die Positionsparameter erzeugt und sind innerhalb des shell-Scriptes gültig. Der Positionsparameter $1 ernthält das erste übergebene Argument, $2 das zweite Argument usw. usf. Sollte die Bezeichnung des Positionsparameters mehrstellig sein, so ist sie in geschweifte Klammern zu setzen (brace-Expansion). Bei Aufruf einer shell-Funktion gelten innerhalb der shell-Funktion lokal eigene Positionsparameter, die die Argumente enthalten, die der shell-Funktion beim Aufruf mitgegeben wurden. Sie gelten nur innerhalb der Funktion.
Die shell stellt eine Reihe von Spezialparametern zur Verfügung. Diese Parameter können nur gelesen werden, eine Wertezuweisung ist nicht erlaubt.
$* |
Expandiert die Positionsparameter $1...$9. $* enthält alle Positionsparameter separiert durch das erste Zeichen aus der Variable IFS. Wenn die Expansion innerhalb von double quotes erfolgt, dann ist das Ergebnis ein Wort, das alle Argumente, separiert durch das Trennzeichen, enthält. Ist IFS nicht gesetzt, wird das Leerzeichen als Separator verwendet. Ist IFS mit einem Nullstring belegt, so werden die Positionsparameter ohne Trennzeichen gelistet. |
$@ |
Expandiert die Positionsparameter $1...$9. Wenn die Expansion innerhalb von double quotes erfolgt, dann ist das Ergebnis eine Liste von Worten der Form "$1" "$2",... Wenn keine Argumente übergeben wurden, so werden $@ und "$@" zu einem Nullstring expandiert. |
$# | Expandiert die Anzahl der Positionsparameter dezimal. |
$? | exit-status, Rückgabewert der letzten synchron ausgeführten Pipeline. |
$- | Expandiert die beim shellstart gesetzten Optionen. |
$$ | Expandiert die Prozessnummer des gerade laufenden shell-Prozesses. Innerhalb einer Subshell wird ebenfalls die Prozessnummer der Muttershell und nicht der Subshell ausgegeben. |
$! | Expandiert die Prozessnummer des zuletzt asynchron ausgeführten Hintergrundprozesses. |
$0 |
Expandiert den Namen der Shell oder des Shellscriptes. Sie ist bereits bei der Initialisierung der Shell gesetzt. Wenn die Shell in ein Shellscript included wurde, dann enthält $0 den Namen des Shellscriptes. If bash is started with the -c option, then $0 is set to the first argument after the string to be executed, if one is present. Otherwise, it is set to the file name used to invoke bash, as given by argument zero. |
$_ | At shell startup, set to the absolute file name of the shell or shell script being executed as passed in the argument list. Subsequently, expands to the last argument to the previous command, after expansion. Also set to the full file name of each command executed and placed in the environment exported to that command. When checking mail, this parameter holds the name of the mail file currently being checked. |
BASH | Enthält den vollen Pfad und Dateinamen der laufenden shell | ||||||||||||||||||||||
BASH_VERSINFO |
Enthält die Versionsinformationen der laufenden bash. Dabei handelt es sich um ein nur-lesbares Array mit folgendem Inhalt
| ||||||||||||||||||||||
BASH_VERSION | Enthält einen Versionsstring der laufenden bash | ||||||||||||||||||||||
COMP_CWORD | An index into ${COMP_WORDS} of the word containing the current cursor position. This variable is available only in shell functions invoked by the programmable completion facilities (see Pro grammable Completion below). | ||||||||||||||||||||||
COMP_LINE | The current command line. This variable is avail able only in shell functions and external commands invoked by the programmable completion facilities (see Programmable Completion below). | ||||||||||||||||||||||
COMP_POINT | The index of the current cursor position relative to the beginning of the current command. If the current cursor position is at the end of the cur rent command, the value of this variable is equal to ${#COMP_LINE}. This variable is available only in shell functions and external commands invoked by the programmable completion facilities (see Pro grammable Completion below). | ||||||||||||||||||||||
COMP_WORDS | An array variable (see Arrays below) consisting of the individual words in the current command line. This variable is available only in shell functions invoked by the programmable completion facilities (see Programmable Completion below). | ||||||||||||||||||||||
DIRSTACK |
Array, um auf den Directory-Stack zuzugreifen. Dieser wird mit den Kommandos pushd, popd und dirs verwaltet. |
||||||||||||||||||||||
EUID | Enthält die effective User-ID. Diese wird z.B. während der Ausführung von Programmen mit gesetztem SUID-Bit angepasst. Diese Variable kann nur gelesen werden. |
||||||||||||||||||||||
FUNCNAME | Enthält den Namen der momentan ausgeführten Shell-Funktion. Diese Variable existiert nur, wenn die Shell eine Funktion ausführt. Zuweisungen an diese Variable haben keinen Effekt und werden mit dem exit-Status 1 (falsch) quittiert. |
||||||||||||||||||||||
GROUPS |
Array mit einer Liste aller Gruppen-IDs des aktuellen Benutzers. Zuweisungen an diese Variable haben keinen Effekt und werden mit dem exit-Status 1 (falsch) quittiert. |
||||||||||||||||||||||
HISTCMD | The history number, or index in the history list, of the current command. If HISTCMD is unset, it loses its special properties, even if it is subse quently reset. | ||||||||||||||||||||||
HOSTNAME | Wird automatisch auf den Namen des Rechners gesetzt. | ||||||||||||||||||||||
HOSTTYPE | Automatically set to a string that uniquely describes the type of machine on which bash is exe cuting. The default is system-dependent. | ||||||||||||||||||||||
LINENO |
Enthält immer die aktuelle Zeilennummer im Shellscript. Wird die Variable in einem Shellscript aufgerufen, so entspricht ihr Wert den bis zum Aufruf innerhalb des Scriptes ausgeführten einfachen Kommandos. Außerhalb von Shellscripten ist die Variable nicht sinnvoll belegt. Wird sie mit unset gelöscht, so wird sie innerhalb der Shell nicht wieder automatisch gesetzt. |
||||||||||||||||||||||
MACHTYPE | Automatisch generierter String, der die CPU-Architektur beschreibt, auf der das System läft. |
||||||||||||||||||||||
OLDPWD | Das vorher durch cd aufgerufene Arbeitsverzeichnis. | ||||||||||||||||||||||
OPTARG | Argument der zuletzt von getopts ausgewerteten Option |
||||||||||||||||||||||
OPTIND | Enthät die Indexnummer der zuletzt von getopts ausgewerteten Option |
||||||||||||||||||||||
OSTYPE | Wird automatisch mit dem Namen des Betriebssystems gesetzt. Der Angabe ist sehr unzuverlässig und es sollte eher uname benutzt werden |
||||||||||||||||||||||
PIPESTATUS |
Enthält ein Array mit dem exit-Code der zuletzt im Vordergrund ausgeführten Kommandosequenz. Wenn es sich dabei um eine Pipe gehandelt hat, so sind die exit-Codes aller Kommandos innerhalb der Pipe in diesem Array abgelegt. |
||||||||||||||||||||||
PPID | Enthält die Prozessnummer des Elternprozesses, der die shell gestartet hat. |
||||||||||||||||||||||
PWD | Das aktuelle Arbeitsverzeichnis, das durch cd gesetzt wurde. |
||||||||||||||||||||||
RANDOM | Enthält bei jedem Lesezugriff eine neue ganzzahlige Zufallszahl aus dem Bereich 0 .... 32767 |
||||||||||||||||||||||
REPLY | Hier legt das built-in Kommando read die gelesene Eingabezeile ab, wenn kein Parameter übergeben wurde. In select-Menüs enthält REPLY die ausgewählte Nummer. |
||||||||||||||||||||||
SECONDS | Enthält die seit dem Start der shell vergangene Zeit in Sekunden. Für jede gestartete Subshell startet diese Variable ebenfalls mit Null. Wird SECONDS ein Wert zugewiesen, so erhöht sih dieser jede Sekunde weitergezählt. If SECONDS is unset, it loses its special properties, even if it is subsequently reset. | ||||||||||||||||||||||
SHELLOPTS | Enthält eine durch Doppelpunkte separierte Liste aller aktiven shell-Optionen. |
||||||||||||||||||||||
SHLVL | Wird immer um Eins erhöht, wenn eine weitere Instance der Bash (Subshell) gestartet wird. |
||||||||||||||||||||||
UID | Enthält die User-ID des Benutzers, der die laufende shell gestartet hat. | ||||||||||||||||||||||
Die folgenden Variablen werden von der bash genutzt. In einigen Fällen sind diese Variablen auf Defaultwerte gesetzt. Diese sind dann entsprechend mit angegeben. |
|||||||||||||||||||||||
BASH_ENV |
Diese Variable wird durch die bash gelesen, wenn ein shell-Script ausgeführt wird. Sie enthält den Namen einer Initialisierungsdatei, die beim Start einer neuen Subshell anstatt .bashrc ausgeführt wird. Es wird vor der Ausführung eine Parameterexpansion, Komandosubstitution und eine Arithmetikexpansion durchgeführt. Das File wird nicht in PATH gesucht. |
||||||||||||||||||||||
CDPATH |
Enthält den Suchpfad für das cd-Kommando. Es handelt sich um eine durch Doppelpunkte getrennte Liste von Verzeichnisnamen.(z.B. ".:~:/usr") |
||||||||||||||||||||||
COLUMNS |
Enthält die Breite des Editorfensters, das für den Kommandozeileneditor und die Menüs zur Verfügung steht. Der Standardwert ist 80. Bei Empfang der Signals SIGWINCH wird diese Variable automatisch gesetzt. |
||||||||||||||||||||||
COMPREPLY | An array variable from which bash reads the possi ble completions generated by a shell function invoked by the programmable completion facility (see Programmable Completion below). |
||||||||||||||||||||||
FCEDIT | Pfad zum Builtin-Editor für das fc-Kommando |
||||||||||||||||||||||
FIGNORE | Enthält eine durch Doppelpunkte getrennte Liste der Suffixe von Dateinamen, die beim Autovervollständigen (TAB) ignoriert werden sollen. (z.B. ".o:.bak:~") |
||||||||||||||||||||||
GLOBIGNORE | Enthält eine durch Kommata getrennte Liste von Mustern, die Namen definiert, welche bei der Dateinamen-Expansion durch * ? [] nicht automatisch expandiert werden sollen. |
||||||||||||||||||||||
HISTCONTROL | If set to a value of ignorespace, lines which begin with a space character are not entered on the his tory list. If set to a value of ignoredups, lines matching the last history line are not entered. A value of ignoreboth combines the two options. If unset, or if set to any other value than those above, all lines read by the parser are saved on the history list, subject to the value of HISTIG NORE. This variable's function is superseded by HISTIGNORE. The second and subsequent lines of a multi-line compound command are not tested, and are added to the history regardless of the value of HISTCONTROL. | ||||||||||||||||||||||
HISTFILE |
Pfadname zur History-Befehlsdatei. Der Standardwert ist $HOME/.bash_history. Wenn die Variable nicht gesetzt ist, wird keine Befehlshistory geführt. |
||||||||||||||||||||||
HISTFILESIZE | Gibt die Maximalanzahl der in der Historydatei vorgehaltenen Befehle an. Der Defaultwert ist 500. |
||||||||||||||||||||||
HISTIGNORE | A colon-separated list of patterns used to decide which command lines should be saved on the history list. Each pattern is anchored at the beginning of the line and must match the complete line (no implicit `*' is appended). Each pattern is tested against the line after the checks specified by HISTCONTROL are applied. In addition to the normal shell pattern matching characters, `&' matches the previous history line. `&' may be escaped using a backslash; the backslash is removed before attempt ing a match. The second and subsequent lines of a multi-line compound command are not tested, and are added to the history regardless of the value of HISTIGNORE. | ||||||||||||||||||||||
HISTSIZE | Gibt die Anzahl der in der Historydatei vorgehaltenen Befehle an. |
||||||||||||||||||||||
HOME |
Heimatverzeichnis der Users. Es ist der Standardwert für cd und der Wert der für die Tildeexpansion. |
||||||||||||||||||||||
HOSTFILE | Contains the name of a file in the same format as /etc/hosts that should be read when the shell needs to complete a hostname. The list of possible hostname completions may be changed while the shell is running; the next time hostname completion is attempted after the value is changed, bash adds the contents of the new file to the existing list. If HOSTFILE is set, but has no value, bash attempts to read /etc/hosts to obtain the list of possible hostname completions. When HOSTFILE is unset, the hostname list is cleared. | ||||||||||||||||||||||
IFS |
Der IFS (Internal Field Separator) wird nach der Expansion für das Wordsplitting durch das read-Komando benutzt. Dieser enthält die Trennzeichen, mit denen die einzelnen Worte der Eingabezeile voneinander getrennt werden. Der Defaultwert dieser Variable ist "<space><tab><newline>". |
||||||||||||||||||||||
IGNOREEOF | Controls the action of an interactive shell on receipt of an EOF character as the sole input. If set, the value is the number of consecutive EOF characters which must be typed as the first charac ters on an input line before bash exits. If the variable exists but does not have a numeric value, or has no value, the default value is 10. If it does not exist, EOF signifies the end of input to the shell. | ||||||||||||||||||||||
INPUTRC | The filename for the readline startup file, over riding the default of ~/.inputrc (see READLINE below). | ||||||||||||||||||||||
LANG | Used to determine the locale category for any cate gory not specifically selected with a variable starting with LC_. | ||||||||||||||||||||||
LC_ALL | This variable overrides the value of LANG and any other LC_ variable specifying a locale category. | ||||||||||||||||||||||
LC_COLLATE | This variable determines the collation order used when sorting the results of pathname expansion, and determines the behavior of range expressions, equivalence classes, and collating sequences within pathname expansion and pattern matching. | ||||||||||||||||||||||
LC_CTYPE | This variable determines the interpretation of characters and the behavior of character classes within pathname expansion and pattern matching. | ||||||||||||||||||||||
LC_MESSAGES | This variable determines the locale used to trans late double-quoted strings preceded by a $. | ||||||||||||||||||||||
LC_NUMERIC | This variable determines the locale category used for number formatting. | ||||||||||||||||||||||
LINES | Used by the select builtin command to determine the column length for printing selection lists. Auto matically set upon receipt of a SIGWINCH. | ||||||||||||||||||||||
If this parameter is set to a file name and the MAILPATH variable is not set, bash informs the user of the arrival of mail in the specified file. | |||||||||||||||||||||||
MAILCHECK | Specifies how often (in seconds) bash checks for mail. The default is 60 seconds. When it is time to check for mail, the shell does so before dis playing the primary prompt. If this variable is unset, or set to a value that is not a number greater than or equal to zero, the shell disables mail checking. | ||||||||||||||||||||||
MAILPATH | A colon-separated list of file names to be checked for mail. The message to be printed when mail arrives in a particular file may be specified by separating the file name from the message with a `?'. When used in the text of the message, $_ expands to the name of the current mailfile. Exam ple: MAILPATH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"' Bash supplies a default value for this variable, but the location of the user mail files that it uses is system dependent (e.g., /var/mail/$USER). | ||||||||||||||||||||||
OPTERR | If set to the value 1, bash displays error messages generated by the getopts builtin command (see SHELL BUILTIN COMMANDS below). OPTERR is initialized to 1 each time the shell is invoked or a shell script is executed. | ||||||||||||||||||||||
PATH |
Enthält den Suchpfad für Kommandos. Es handelt sich dabei um eine durch Doppelpunkte getrennte Liste von Verzeichnissen in denen nach einem Kommando gesucht wird, das ohne Pfadangabe aufgerufen wird. Standardwert ist PATH=:/bin:/usr/bin |
||||||||||||||||||||||
POSIXLY_CORRECT | If this variable is in the environment when bash starts, the shell enters posix mode before reading the startup files, as if the --posix invocation option had been supplied. If it is set while the shell is running, bash enables posix mode, as if the command set -o posix had been executed. | ||||||||||||||||||||||
PROMPT_COMMAND | If set, the value is executed as a command prior to issuing each primary prompt. | ||||||||||||||||||||||
PS1 |
Enthält den Primärprompt. Er ist der Prompt zur Befehlseingabe. Innerhalb des Strings sind in der bash bestimmte Sonderzeichen erlaubt, die eine besondere Bedeutung besitzen. Der Backslash leitet dabei eine Escapesequenz ein. Folgende Sonderzeichen werden expandiert:
Der Defaultwert ist "\s-\v\$ ". |
||||||||||||||||||||||
PS2 |
Enthält den Sekundärprompt. Er wird für mehrzeilige Befehle verwendet. Der Defaultwert ist >. |
||||||||||||||||||||||
PS3 |
Enthält den Promptstring für Menüs (mit select). Defaultwert ist #. |
||||||||||||||||||||||
PS4 |
Enthält den Debugging-Promptstring für die Option -x. Der Defaultwert ist +. |
||||||||||||||||||||||
TIMEFORMAT |
Ausgabeformat des time-Kommandos.
Der optionale Parameter p gibt die Anzahl der Stellen nach dem Komma, mit denen der Wert angezeigt werden soll.
Der Wert 0 (Null) bedeutet, das keine Stellen nach dem Komma angezeigt werden sollen.
Der größte Wert für p ist 3, wird ein größerer Wert angegeben, so wird p auf 3 gesetzt.
Wird kein Wert für p angegeben, so ist der default-Wert 3. |
||||||||||||||||||||||
TMOUT |
TIMEOUT-Wert. Wenn TMOUT Sekunden lang kein Kommando mehr eingegeben wurde, so beendet sich die bash. Der Wert 0 (Null) steht für unendlich. |
||||||||||||||||||||||
auto_resume | This variable controls how the shell interacts with the user and job control. If this variable is set, single word simple commands without redirections are treated as candidates for resumption of an existing stopped job. There is no ambiguity allowed; if there is more than one job beginning with the string typed, the job most recently accessed is selected. The name of a stopped job, in this context, is the command line used to start it. If set to the value exact, the string supplied must match the name of a stopped job exactly; if set to substring, the string supplied needs to match a substring of the name of a stopped job. The substring value provides functionality analo gous to the %? job identifier (see JOB CONTROL below). If set to any other value, the supplied string must be a prefix of a stopped job's name; this provides functionality analogous to the % job identifier. | ||||||||||||||||||||||
histchars |
Enthält zwei Zeichen zur Kontrolle der Wiederholung von Kommandos aus dem Kommandozeilenspeicher. Das erste Zeichen leitet eine Kommandozeilenerweiterung aus dem History-Puffer ein. Die Voreinstellung ist das !-Zeichen. Das zweite Zeichen kennzeichnet einen Kommentar, wenn es das erste Zeichen eines Wortes ist. Ein solcher Kommentar wird bei der Ausführung eines Kommandos ignoriert. |
Die bash unterstützt eindimensionale Arrays.
Jede Variable kann als Array angesprochen werden.
Es ist nicht notwendig, ein Array vor der Benutzung zu definieren, man kann dies jedoch mit declare und typeset tun.
Mit
declare -a name
wird die Variable name explizit als Array deklariert. Eine Zuweisung von Attributen ist ebenfalls möglich. Mit
typeset -i name
z.B. wird festgelegt, dass die Elemente des Arrays name nur aus Integerzahlen bestehen.
Dabei wird keine Obergrenze für den Index angegeben und es ist auch nicht notwendig, die Arrayelemente fortlaufend zu indizieren.
Der Index ist eine nicht negative Integerzahl, die Indizierung beginnt mit Null.
Ein Array wird bei der ersten Wertezuweisung automatisch durch die bash erzeugt.
Grundsätzlich gibt es zwei Möglichkeiten der Wertezuweisung.
Auf die einzelnen Elemente eines Arrays name kann man mit ${name[subscript]} zugreifen.
Die geschweiften Klammern sind erforderlich, um Konflikte mit der Pathname-Expansion zu vermeiden.
Wenn subscript mit @ oder * angegeben wird, so werden alle Elemente des Arrays expandiert.
Die subscripts @ und * unterscheiden sich, wenn die Worte in Anführungszeichen gesetzt werden.
"${name[@]}" expandiert die Elemente des Arrays name in eine Liste von Einzelworten, die durch Trennzeichen (im allgemeinen das erste Zeichen der shell-Variable IFS, also das Leerzeichen) voneinander separiert sind.
"${name[*]}" expandiert die Elemente des Arrays name als ein Wort, das den Inhalt der Elemente durch Trennzeichen (im allgemeinen das erste Zeichen der shell-Variable IFS, also das Leerzeichen) separiert, enthält.
Wenn das Array name keine Elemente enthält, werden beide Formen zu Nullstrings expandiert.
${#name[subscript]} gibt an, wie lang der in ${name[subscript]} abgelegte Wert ist.
${#name[*]} und ${#name[@]} gibt die Anzahl der Elemente des Arrays name zurück.
Wenn kein subscript angegeben wird, so erfolgt der Zugriff auf das Element mit der Indexnummer Null.
Mit dem unset-Kommando können einzelne Arrayelemente oder ganze Arrays gelöscht werden.
unset name[subscript] löscht das indizierte Arrayelement des Arrays name.
unset name löscht das komplette Array name.
unset name[*] oder unset name[@] löscht alle Elemente des Arrays name.
Die shell-Befehle declare, local und readonly können mit der Option -a auf Arrays angewendet werden.
Der shell-Befehl read akzeptiert ebenfalls die Option -a und legt dann die an STDIN gelesenen Daten in einem Array ab.
Die Brace-Expansion ist eine Möglichkeit der bash, verschiedene Stringmuster zu erzeugen.
Eine gültige Brace Expansion bestehen aus einem optionalen Präfix, gefolgt von in ungequoteten geschweiften Klammern, durch ungequotete Kommata separierten Alternativ-Ausdrücken, denen ein optionaler Suffix folgt.
Die Syntax lautet allgemein:
präfix{ muster1, muster2, ... }suffix
Dieses Muster wird durch die bash in eine Reihe von Strings expandiert, dazu wird vor jedes Muster muster1, muster2,... der Präfix gesetzt und der Suffix angehängt.
Das Ergebnis der Expansion ist nicht sortiert, sondern die Expansion wird von links nach rechts abgearbeitet.
Ein Beispiel:
Das Muster a{d,c,b}e wird durch die bash in "ade ace abe" expandiert.
Die Brace-Expansion wird als erste, vor allen anderen Expansionen durchgeführt.
Die Brace-Expansion läuft zeichenorientiert ab.
Es findet keinerlei syntaktische Interpretation der geklammerten Alternativ-Ausdrücke statt, deshalb bleiben auch Spezialzeichen anderer Expansionsarten erhalten und können in der Brace-Expansion verwendet werden um nachfolgend expandiert zu werden.
Sollten die Alternativ-Ausdrücke die Zeichen {} oder , enthalten, so sind sie mit dem backslash zu quoten.
Eine unkorrekte Brace-Expansion wird nicht ausgeführt.
Die bash gibt eine Fehlermeldung auf STANDARDERR aus.
Um Konflikte mit der nachfolgenden Parameterexpansion zu vermeiden, sollte man den String ${ wohlüberlegt einsetzten.
Die Brace-Expansion ist ein sehr vorteilhaftes Werkzeug, wenn viele Ausdrücke erzeugt werden sollen, die sich nur gering unterscheiden und der Präfix recht lang ist.
Beispiele:
Das Kommando
mkdir /usr/local/src/bash/{old,new,dist,bugs}
legt nacheinander die Verzeichnisse /usr/local/src/bash/old, /usr/local/src/bash/new, /usr/local/src/bash/dist und /usr/local/src/bash/bugs an. Das Kommando
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
führt nacheinander ein chown für die Dateien /usr/ucb/ex, /usr/ucb/edit, /usr/lib/ex?.?* und /usr/lib/how_ex aus.
Die Brace-Expansion der bash wird in der shell (/bin/sh) nicht unterstützt.
Mit der Startoption -B kann die Brace-Expansion der bash abgeschaltet werden.
Wenn ein Wort mit einer ungequoteten Tilde ~ beginnt, werden alle Zeichen bis zum ersten ungequoteten slash in die Tildeexpansion eingeschlossen und als Tildepräfix behandelt.
Die Tildeexpansion wird unter folgenden Bedingungen durchgeführt:
Tildepräfix | Bedeutung |
~ |
Der Tildepräfix ist ein Nullstring. Die Tilde wird mit dem Inhalt der shell-Variable HOME expandiert. Wenn HOME nicht gesetzt ist, wird die Tilde durch den Pfad des Homeverzeichnises des Benutzers ersetzt, der die shell ausführt. |
~BENUTZERNAME |
Wenn der Tildepräfix aus ungequoteten Zeichen besteht und einem Benutzernamen des Systems entspricht, wird mit dem Homeverzeichnis dieses Users expandiert. Ist der Benutzername unbekannt, so wird keine Tildeexpansion durchgeführt und der String bleibt unverändert. |
~- |
Wenn der Tildepräfix nur aus dem Zeichen - besteht, so wird bei der Tildeexpansion das zuvor besuchte Verzeichnis (OLDPWD) eingesetzt. |
~+ |
Wenn der Tildepräfix nur aus dem Zeichen + besteht, so wird bei der Tildeexpansion der Name des aktuellen Arbeitsverzeichnises (pwd) eingesetzt. |
In jeder Variablenzuweisung wird auf einen ungequoteten Tildepräfix getestet, der einem = oder : folgt. In diesem Fall wird ebenfalls eine Tildeexpansion durchgeführt. Dadurch können Tildeexpansionen auch in der Zuweisung der Variablen PATH, MAILPATH und CDPATH verwendet werden.
Das Zeichen $ leitet eine Parameterexpansion, Kommandosubstitution oder Arithmetikexpansion ein.
Die Verwendung der geschweiften Klammer (brace) stellt dabei sicher, dass der zu expandierende Parametername eindeutig zu identifizieren ist wenn ihm unmittelbar weitere Zeichen folgen.
Wenn die geschweifte Klammerung benutzt wird, so wird das Ende des Parameters durch das erste nicht gequotete oder in Kommandosubstitutionen oder Arithmetikexpansionen eingebettete Auftreten der geschlossenen geschweiften Klamer } festgelegt.
Expansionen:
${parameter} |
Der Parameter parameter wird durch seinen Wert ersetzt. Die Klammern sind notwendig, wenn es sich um einen Positionsparameter mit mehr als einer Stelle handelt, oder dem Parameternamen unmittelbar weitere Zeichen folgen und fälschlicherweise als Teil des Parameternamens interpretiert werden könnten. |
${parameter:-word} |
Defaultwert-Definition. |
${parameter:=word} |
Defaultwert-Zuweisung. |
${parameter:?word} |
Wenn der Parameter parameter nicht existiert oder einen Nullstring enthält, wird eine durch die shell die Fehlermeldung word auf STANDARDERR ausgegeben und wenn die shell nicht interaktiv ist, die shell durch ein exit verlassen. Ansonsten wird der Parameter durch seinen Wert substituiert. |
${parameter:+word} |
Wenn der Parameter parameter nicht existiert oder einen Nullstring enthält, wird er mit einem Nullstring expandiert. Ansonsten wird der Parameter durch word substituiert. |
${parameter:offset} ${parameter:offset:length} |
Substring Expansion |
${!prefix*} | Expandiert die Namen aller Variablen die mit dem Prefix prefix beginnen. Die Liste wird mit dem ersten Zeichen aus IFS als Trennzeichen (im Normalfall das Leerzeichen) erstellt. |
${#parameter} |
Es wird die Anzahl der Zeichen im Inhalt des Parameters zurückgeliefert. Ist der Parameter @ oder *, so wird die Anzahl der verfügbaren Positionsparameter expandiert. Ist der Parameter ein Array, so ist es die Anzahl der Elemente im Array parameter. |
${parameter#word} ${parameter##word} |
Es wird mit dem Inhalt des Parameters parameter substituiert, wobei dieser zuvor nach dem Suchmuster word durchsucht wird. |
${parameter%word} ${parameter%%word} |
Es wird mit dem Inhalt des Parameters parameter substituiert, wobei dieser zuvor nach dem Suchmuster word durchsucht wird. |
${parameter/word/string} ${parameter//word/string} |
Es wird mit dem Inhalt des Parameters parameter substituiert, wobei dieser zuvor nach dem Suchmuster word durchsucht wird. |
Die Arithmetic-Expansion erlaubt die Berechnung arithmetischer Ausdrücke und die Expansion durch das Ergebnis.
Das Format einer Arithmetic-Expansion ist:
$((expression))
The expression is treated as if it were within double
quotes, but a double quote inside the parentheses is not
treated specially.
Die einzelnen Teile des arithmetischen Ausdrucks expression durchlaufen vorher die Parameterexpansion, die Stringexpansion, Kommandosubstitution und das Entquoten.
Die Berechnung erfolgt nach den im Abschnitt "Arithmetische Berechnungen" beschriebenen Regeln.
Sollte der arithmetische Ausdruck fehlerhaft sein, so erzeugt die bash eine Fehlermeldung auf STANDARDERR und führt keine Expansion aus.
Die Kommandosubstitution erlaubt es, den Kommandoaufruf durch die Ausgabe des Kommandos zu ersetzen (substituieren).
Die Syntax erlaubt zwei unterschiedliche Formen:
$(command)
oder
`command`
Die bash wird dann das Kommando command ausführen und den Kommandoaufruf durch die Ausgabe auf STANDARDOUT substituieren.
Aus dem Ausgabedatenstrom werden, bis auf ein abschließendes <newline>-Zeichen, alle anderen durch ein Trennzeichen (im allgemeinen das Leerzeichen) ersetzt.
Die Kommandosubstitution $(cat file) kann durch das schnellere Äquivalent $(< file) ersetzt werden.
Die Shell durchsucht die Ergebnisse der Parameterexpansion, Kommandosubstitution und Arithmeticexpansion, die nicht durch " (double-quotes, doppelte Anführungszeichen) gequotet wurden mit dem wordsplitting. Die Shell behandelt jedes Zeichen von IFS als Trennzeichen, und teilt das Ergebnis der Expansionen in Worte auf. Wenn IFS nicht gesetzt ist, oder dessen Wert genau der Standardwert <space><tab><newline> ist, dann dient jede Folge der Zeichen <space><tab><newline> zur Abgrenzung der Worte. Wenn IFS einen anderen Wert als den Standardwert besitzt, dann werden <space><tab> als Trennzeichen für Anfang und Ende eines Wortes ignoriert und nur das IFS-Zeichen wird als Trennzeichen interpretiert. Any character in IFS that is not IFS whitespace, along with any adjacent IFS whitespace characters, delimits a field. A sequence of IFS whitespace characters is also treated as a delimiter. If the value of IFS is null, no word splitting occurs. Explizite Null-Argumente ( "" oder'') werden beibehalten. Ungequotete implizite Null-Argumente, die sich aus der Expansion von Parametern ergeben und die keine Werte enthalten, werden entfernt. Wenn ein in doppelten Anführungszeichen gequoteter Parameter ohne Wert expandiert wird, so ist das Ergebnis ein Null-Argument und wird beibehalten. Wenn keine Expansion stattfindet, dann wird auch kein wordsplitting durchgeführt.
* | schließt jedes Zeichen ein, auch den Nullstring. |
? | schließt ein einzelnes beliebiges Zeichen ein. |
[...] | Matches any one of the enclosed characters. A pair of characters separated by a hyphen denotes a range expression; any character that sorts between those two characters, inclusive, using the current locale's collating sequence and character set, is matched. If the first character following the [ is a ! or a ^ then any character not enclosed is matched. The sorting order of characters in range expressions is determined by the current locale and the value of the LC_COLLATE shell variable, if set. A - may be matched by including it as the first or last character in the set. A ] may be matched by including it as the first character in the set. Within [ and ], character classes can be specified using the syntax [:class:], where class is one of the following classes defined in the POSIX.2 stan dard: alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit A character class matches any character belonging to that class. The word character class matches letters, digits, and the character _. Within [ and ], an equivalence class can be speci fied using the syntax [=c=], which matches all characters with the same collation weight (as defined by the current locale) as the character c. Within [ and ], the syntax [.symbol.] matches the collating symbol symbol. |
If the extglob shell option is enabled using the shopt builtin, several extended pattern matching operators are recognized. In the following description, a pattern-list is a list of one or more patterns separated by a |. Com posite patterns may be formed using one or more of the following sub-patterns: | |
?(pattern-list) | Matches zero or one occurrence of the given patterns |
*(pattern-list) | Matches zero or more occurrences of the given patterns |
+(pattern-list) | Matches one or more occurrences of the given patterns |
@(pattern-list) | Matches exactly one of the given patterns |
!(pattern-list) | Matches anything except one of the given patterns |
Die Fähigkeit, Datenströme umzuleiten, ist eine sehr leistungsfähige und bedeutsame Eigenschaft der Linux-shell. Im Noramllfall geht man von drei Datenströmen aus, die auch Kanäle genannt werden. In der shell gibt es drei solcher Kanäle:
Dieser Kanal ist in einer interaktiven shell oder login-shell mit der Tastatur eines Terminals verbunden. Damit können Eingaben von der Tastatur gelesen werden.
Dieser Kanal ist in einer interaktiven shell oder login-shell mit dem Bildschirm eines Terminals verbunden. Dadurch werden Ausgaben der shell sofort angezeigt.
Wie bei der Standardausgabe ist auch dieser Kanal in der Regel mit dem Terminalbildschirm verbunden.
Der Standardinput hat also keine Verbindug zum Terminalbildschirm.
Das die eingegebenen Zeichen trotzdem sofort auf dem Bildschirm erscheinen ist keine Eigenschaft der shell, sondern des Terminals selbst (stty -echo).
Erst mit der Enter-Taste wird das Terminal die Eingabezeile an den Standardinput der shell senden.
Wenn jedoch Einzelzeichen gelesen werden sollen, so ist das Terminal entsprechend zu programmieren (siehe stty).
Bevor die shell ein Kommando ausführt, interpretiert sie die Eingabezeile und scannt sie auf entsprechende Zeichen zur Umleitung der Datenkanäle von links nach rechts.
Das eventuell notwendige Öffnen und Schliessen von Dateien zur Umleitung wird noch vor der Ausführung des Kommandos durch die shell vorgenomen.
Die Umleitung von Datenströmen wird durch eine spezielle Notation mit den Operatoren <, >, & sowie der entsprechenden Kanalnummer vorgenommen.
Die Notation zur Umleitung ist für den Standardinput 0< oder verkürzt <.
Für den Standardoutput 1> oder verkürzt >.
Für alle anderen Datenkanäle ist die Angabe der Kanalnummer zwingend.
Da ohne weiteres noch weitere Datenkanäle definiert werden können, lautet die Notation für Eingabekanäle allgemein:
n<
und für Ausgabekanäle
n>
,
wobei n die jeweilige Kanalnummer angibt.
Das auf die Umleitungsoperatoren folgende Wort wird durch die shell expandiert.
Das Ergebnis der Expansion wird als Name einer Umleitungsdatei interpretiert.
Wird in mehr als ein Wort expandiert, so erzeugt die bash eine Fehlermeldung.
Die bash wird versuchen, diese Datei zu öffnen oder zu erzeugen.
Schlägt das Öffnen oder Erzeugen einer Umleitungsdatei fehl, so wird durch die bash eine Fehlermeldung erzeugt.
Das Kommando wird nicht ausgeführt.
Die Reihenfolge der Umleitungsdefinitionen hat ebenfalls Auswirkungen auf die Art der Umleitung selbst.
Mit dem Kommandoaufruf.
ls > dirlist 2>&1
werden die Ausgaben von Standardout, Kanal 1 und Standarderr Kanal 2 in die Datei dirlist umgeleitet.
Beim Kommandoaufruf:
ls 2>&1 > dirlist
wird nur eine Kopie von Standarderr Kanal 2 nach Standardout, Kanal 1 umgeleitet und in die Datei dirlist geschickt.
Die Meldungen von Standarderr, Kanal 2 erscheinen dadurch weiterhin auf dem Bildschirm.
Die bash verwaltet weiterhin spezielle (virtuelle) Dateien zur Verwendung in Umleitungen.
Diese können der folgenden Tabelle entnommen werden:
Dateiname | Bedeutung |
/dev/fd/fd | fd ist eine gültige Kanalnummer. Diese Spezialdatei ist eine Referenz auf den Filedescriptor fd, Kanal fd. |
/dev/stdin | Diese Spezialdatei ist eine Referenz auf Standardin, Kanal 0. |
/dev/stdout | Diese Spezialdatei ist eine Referenz auf Standardout, Kanal 1. |
/dev/stderr | Diese Spezialdatei ist eine Referenz auf Standarderr, Kanal 2. |
/dev/tcp/host/port |
Diese Spezialdatei ist eine Referenz auf einen TCP-Socket. Wenn host ein gütiger Hostname oder eine gültige IP-Adresse und port eine gültige Portnummer oder ein Service-Portname ist, so öffnet die bash eine entsprechende Netzwerkverbindung. |
/dev/udp/host/port |
Diese Spezialdatei ist eine Referenz auf einen UDP-Socket. Wenn host ein gütiger Hostname oder eine gültige IP-Adresse und port eine gültige Portnummer oder ein Service-Portname ist, so öffnet die bash eine entsprechende Netzwerkverbindung. |
/dev/null |
Diese Gerätedatei ist zwar keine Spezialdatei der bash, wird im Zusammenhang mit Umleitungen jedoch häufig genutzt.
Alle an diese Gerätedatei gesendeten Datenströme werden vernichtet (Trash).
Durch eine Umleitung nach /dev/null können also z.B. Ausgaben oder Fehlermeldungen unterdrückt werden. |
Eine Eingabeumleitung wird mit der Notation:
[n]<word
definiert. Der Ausdruck word muss nach der Expansion durch die bash den Namen einer Datei ergeben, die lesend geöffnet werden kann.
Der Dateiinhalt kann dann über den Filedescriptor n auf kanal n gelesen werden.
Ist n eine 0 (Null) oder wird keine Kanalnummer angegeben, so werden die Daten nach Standardin umgeleitet.
Eine Ausgabeumleitung wird mit der Notation:
[n]>word
definiert.
Der Ausdruck word muss nach der Expansion durch die bash den Namen einer Datei ergeben, die schreibend geöffnet werden kann.
Daten, die auf den Filedescriptor n auf Kanal n geschrieben werden, werden in die Datei umgeleitet.
Der alte Inhalt der Datei wird überschrieben und geht verloren.
Ist n eine 1 oder wird keine Kanalnummer angegeben, so werden die Daten von Standardout umgeleitet.
Wurde beim Start der bash die noclobber-Option enabled, so erzeugt eine Umleitung mit dem Operator > einen Fehler, wenn die Umleitungsdatei eine reguläre Datei ist und bereits existiert.
Soll eine Umleitung in die Datei trotzdem durchgeführt werden, so ist der Operator >¦ zu verwenden.
Wurde die noclobber-Option disabled oder wird der Operator >¦ verwendet, so wird der alte Inhalt der Umleitungsdatei ohne Nachfrage oder Fehlermeldung überschrieben und geht dadurch verloren.
Sollte die Umleitungsdatei noch nicht existieren, so wird die bash versuchen eine solche Datei anzulegen.
Wenn das Anlegen der Datei fehlschlägt, so erzeugt die bash eine Fehlermeldung, das Kommando wird nicht ausgeführt.
Eine anhängende Ausgabeumleitung wird mit der Notation:
[n]>>word
definiert.
Sie funktioniert im Wesentlichen genau so wie eine einfache Ausgabeumleitung.
Wenn die Umleitungsdatei bereits existiert, so wird der Inhalt jedoch nicht überschrieben, sondern die umgeleiteten Daten werden an das Ende der Umleitungsdatei angehängt.
Sollte die Umleitungsdatei noch nicht existieren, so wird die bash versuchen eine solche Datei anzulegen.
Wenn das Anlegen der Datei fehlschlägt, so erzeugt die bash eine Fehlermeldung, das Kommando wird nicht ausgeführt.
Die Bash erlaubt es, die Datenströme von Standardout und Standarderr gemeinsam in eine Datei umzuleiten.
Die Notation der Umleitung ist:
&>word
oder
>&word
Von den beiden Formen ist die erste vorzuziehen, sie sind aber beide äquivalent zur Notation:
>word 2>&1
Dieser Umleitungstyp veranlasst die bash einen Input direkt aus den aktuellen Sourcen zu lesen.
Damit können innerhalb eines shell-Scriptes mehrere Zeilen z.B. direkt aus dem Scripttext nach Standardin umgeleitet werden.
Die Notation für ein Here-Document hat folgende Notation:
<<[-]word
....
here-document
....
delimiter
Es werden alle Zeilen zwischen der Startzeile (<<[-]word) und dem abschliessenden delimiter gelesen und als Standardinput an ein Kommando gesendet.
word und delimiter müssen absolut identisch sein.
Die delimiter-Zeile darf keine weiteren (auch nicht sichtbaren) Zeichen außer dem abschliessenden <newline> enthalten.
Für den Inhalt des Here-Dokumentes gelten folgende Regeln:
Wenn word gequotet wird, dann wird keine Parameterexpansion, Kommandosubstitution, Arithmeticexpansion und Pfadnamenexpansion auf word angewendet.
delimiter muss dann dem entquoteten Ergebnis von word entsprechen.
Der Inhalt des Here-Dokumentes wird dann nicht expandiert.
Ist word ungequotet, so werden auf die Zeilen des Here-Dokumentes die Parameterexpansion, Kommandosubstitution und Arithmeticexpansion angewendet.
Ein gequotetes <newline> wird ignoriert, die Sonderzeichen \, $ und ` müssen mit dem backslash \ gequotet werden, um die Sonderbedeutung aufzuheben.
If the redirection operator is <<-, then all leading tab
characters are stripped from input lines and the line con
taining delimiter. This allows here-documents within
shell scripts to be indented in a natural fashion.
Eine Variante des Here-Documents ist der Here-String der Form:
<<<word
word wird durch die shell expandiert und dann als Standardinput an ein Kommando gesendet.
Der Umleitungsoperator:
[n]<&word
wird benutzt, um einen Input-Filedescriptor zu duplizieren.
Wenn word in eine oder mehrere gültige Kanalnummern expandiert wird, so wird der Inhalt dieser Kanäle in den Kanal n kopiert.
Sollte eine aus word expandierte Kanalnummer kein gültiger Input-Kanal sein, so wird die Umleitung mit einem Fehler abgebrochen.
Durch die Notation:
[n]<&-
wird der Kanal n geschlossen.
Wird n nicht explizit angegeben, so beziehen sich die Umlenkungen auf den Standardinput-Kanal 0.
Der Operator:
[n]>&word
wird in ähnlicher Weise benutzt, um einen Output-Kanal zu duplizieren.
Wenn n nicht explizit angegeben wird, so beziehen sich die Umlenkungen auf den Standardoutput-Kanal 1.
Sollte eine aus word expandierte Kanalnummer kein gültiger Output-Kanal sein, so wird die Umleitung mit einem Fehler abgebrochen.
Eine Besonderheit ist die Notation:
>&
durch die der Standardoutput-Kanal 1 und Standarderror-Kanal 2 gemeinsam umgeleitet werden.
Der Umleitungsoperator:
[n]<&digit-
dupliziert den Kanal digit in den Kanal n um.
Wenn n nicht angegeben wird, so bezieht sich die Operation auf den Standardinput-Kanal 0.
Nach der Duplizierung wird der Kanal digit geschlossen.
Ähnlich verhält es sich mit dem Umleitungsoperator:
[n]>&digit-
der Kanal digit wird in den Kanal n dupliziert.
Wenn n nicht angegeben wird, so bezieht sich die Operation auf den Standardoutput-Kanal 1.
Der Umleitungsoperator:
[n]<>word
bewirkt, die Öffnung des Filedescriptors n mit lesendem und schreibendem Zugriff auf eine Datei, deren Name aus word expandiert wird.
Wenn n nicht angegeben wird, so bezieht sich die Operation auf den Standardinput-Kanal 0.
Sollte die Datei nicht existieren, so wird versucht sie anzulegen.
Sollte das fehlschlagen, so wird die Umleitung mit einer Fehlermeldung abgebrochen.
Eine shell-Funktion ist eine in der shell definierte Abfolge von Kommandos, die unter einem Namen aufgerufen werden kann. Der Funktionsname wird wie ein shellkommando benutzt. Wird er aufgerufen, so wird die Kommandoliste die in der Funktionsdefinition festgelegt wurde, ausgeführt. Die Funktion wird innerhalb Shell ausgeführt, es wird also kein eigener Prozess oder eine eigene Subshell gestartet. Damit ist die Ausführung einer Shellfunktion einem Aufruf eines Shellscriptes vorzuziehen. When a function is executed, the arguments to the function become the positional parameters during its execution. The special parameter # is updated to reflect the change. Positional parameter 0 is unchanged. The FUNCNAME variable is set to the name of the function while the function is executing. All other aspects of the shell execution environment are identical between a func tion and its caller with the exception that the DEBUG trap (see the description of the trap builtin under SHELL BUILTIN COMMANDS below) is not inherited unless the func tion has been given the trace attribute (see the descrip tion of the declare builtin below). Variables local to the function may be declared with the local builtin command. Ordinarily, variables and their values are shared between the function and its caller. If the builtin command return is executed in a function, the function completes and execution resumes with the next command after the function call. When a function com pletes, the values of the positional parameters and the special parameter # are restored to the values they had prior to the function's execution. Function names and definitions may be listed with the -f option to the declare or typeset builtin commands. The -F option to declare or typeset will list the function names only. Functions may be exported so that subshells auto matically have them defined with the -f option to the export builtin. Functions may be recursive. No limit is imposed on the number of recursive calls.
Die bash erlaubt die Berechnung arithmetischer Ausdrücke unter verschiedenen Umständen. Einaml durch die Verwendung des internenshell-Kommandos let und zum anderen durch die Arithmetic Expansion. Die Berechnung wird mit Integerzahlen durchgeführt. Es wird kein Test auf Zahlenbereichsüberschreitung durchgeführt. Die Division durch 0 führt zur Auslösung eines Signals (SIGFPE). The operators and their precedence and associativity are the same as in the C language. The following list of operators is grouped into levels of equal-precedence operators. The levels are listed in order of decreasing precedence. Folgende Operatoren stehen in der bash zur Verfügung. Die Operatoren sind absteigend nach ihrer Wertigkeit aufgelistet:
Operator | Bedeutung |
id++ id-- | Variablen postincrement postdecrement |
++id --id | Variablen preincrement predecrement |
+ - | positives Vorzeichen, negatives Vorzeichen |
! ~ | logische Negation, bitweise Negation |
** | Exponentfunktion |
* / % | Multiplikation, Division, Modulo |
+ - | Addition, Subtraktion |
<< >> | bitweises Linksschieben, bitweises Rechtsschieben |
<= >= < > | kleiner und gleich, größer und gleich, kleiner, größer |
== != | gleich, ungleich |
& | bitweises UND |
^ | bitweises Exclusiv-ODER |
¦ | bitweises ODER |
&& | logisches UND |
¦¦ | logisches ODER |
expr?expr:expr | abhängige Berechnung |
= *= /= %= += -= <<= >>= &= ^= ¦= | komplexe Zuweisungsoperatoren |
expr1 , expr2 | Komma |
shell-Variablen sind als Operanden erlaubt. Vor der Berechnung wird die Parameterexpansion durchgeführt. Within an expression, shell variables may also be referenced by name without using the parameter expansion syntax. The value of a variable is evaluated as an arithmetic expression when it is referenced. A shell variable need not have its integer attribute turned on to be used in an expression. Konstanten, die mit einer führenden Null beginnen, werden als oktale Integerzahlen interpretiert. Konstanten, die mit 0x beginnen, werden als hexadezimale Inegerzahlen interpretiert. Konstanten n in der Form [base#]n, werden als Zahlen mit der Zahlenbasis interpretiert. base ist eine Dezimalzahl zwischen 2 und 64. Wenn [base#] nicht angegeben wird, so ist die Zahlenbasis 10. Ziffern größer als 9 werden mit Kleinbuchstaben, Großbuchstaben und @ und _ notiert. interpretiert. Bei Zahlenbasen kleiner 36 bilden die Klein- und Großbuchstaben die Ziffernwerte 10 bis 35 ab. Subexpressions in parentheses are evaluated first and may override the precedence rules above.
Vergleichs-Operatoren werden in den Komandos [[, test und [ verwendet um Dateiatribute zu testen oder arithmetische Werte oder Zeichenketten miteinander zu vergleichen und zu testen.
Die Operatoren sind entweder unär oder binär.
Wenn eines der Dateiargumente eines der Spezialfiles /dev/fd/n ist, dann wird der Filedeskriptor n getestet.
Mit den Dateiargumenten /dev/stdin, /dev/stdout oder /dev/stderr werden die Filedeskriptoren 0,1 oder 2 getestet.
Operator | Bedeutung |
-a Datei | wahr, wenn die Datei existiert |
-b Datei | wahr, wenn die Datei existiert und eine blockorientierte Gerätedatei ist (z.B. /dev/hda1) |
-c Datei | wahr, wenn die Datei existiert und eine zeichenorientierte Gerätedatei ist (z.B. /dev/ttyS0) |
-d Datei | wahr, wenn die Datei existiert und ein Verzeichnis ist |
-e Datei | wahr, wenn die Datei existiert |
-f Datei | wahr, wenn die Datei existiert und eine normale Datei ist |
-g Datei | wahr, wenn die Datei existiert und das Set-Group-ID-Bit gesetzt ist |
-h Datei | wahr, wenn die Datei existiert und ein symbolischer Link ist |
-k Datei | wahr, wenn die Datei existiert und das Sticky-Bit gesetzt ist |
-p Datei | wahr, wenn die Datei existiert und eine Named-Pipe ist |
-r Datei | wahr, wenn die Datei existiert und lesbar ist |
-s Datei | wahr, wenn die Datei existiert und mindestens ein Zeichen enthält |
-t Kanalnummer | wahr, wenn die Kanalnummer geöffnet und mit einem Terminal verknüpft ist. |
-u Datei | wahr, wenn die Datei existiert und das Set-User-ID-Bit gesetzt ist |
-w Datei | wahr, wenn die Datei existiert und schreibbar ist |
-x Datei | wahr, wenn die Datei existiert und ausführbar ist |
-O Datei | wahr, wenn die Datei existiert und dem effektiven User gehört |
-G Datei | wahr, wenn die Datei existiert und der effektiven Gruppe gehört |
-L Datei | wahr, wenn die Datei existiert und ein symbolischer Link ist |
-S Datei | wahr, wenn die Datei existiert und ein Socket ist |
-N Datei | wahr, wenn die Datei existiert und seit dem letzten Lesezugriff verändert wurde |
file1 -nt file2 | wahr, wenn die Datei file1 ein neueres Modifikationsdatum als file2 hat, oder wenn file2 existiert und file1 nicht |
file1 -ot file2 | wahr, wenn die Datei file1 ein älteres Modifikationsdatum als file2 hat, oder wenn file1 existiert und file2 nicht |
file1 -et file2 | wahr, wenn die Dateien file1 und file2 eine Referenz auf die selbe Inodenummer auf dem gleichen Device sind |
-n Zeichenkette | wahr, wenn die Zeichenkette mindestens ein beliebiges Zeichen (auch Leerzeichen) enthält |
-o optname | wahr, wenn die shell-Option optname gesetzt ist |
-z Zeichenkette | wahr, wenn die Zeichenkette ein NULL-String ist, dh die Länge 0 besitzt |
Zeichenkette1 == Zeichenkette2 | wahr, wenn die Zeichenketten identisch sind |
Zeichenkette1 != Zeichenkette2 | wahr, wenn die Zeichenketten nicht identisch sind |
Zeichenkette1 < Zeichenkette2 | wahr, wenn die Zeichenkette1 in alphabetischer Reihenfolge (entsprechend locale) vor Zeichenkette2 eingeordnet wird |
Zeichenkette1 > Zeichenkette2 | wahr, wenn die Zeichenkette1 in alphabetischer Reihenfolge (entsprechend locale) nach Zeichenkette2 eingeordnet wird |
Wert1 -eq Wert2 | wahr, wenn Wert1 und Wert2 gleich sind (equal) |
Wert1 -ne Wert2 | wahr, wenn Wert1 und Wert2 ungleich sind (no equal) |
Wert1 -lt Wert2 | wahr, wenn Wert1 kleiner als Wert2 ist (less then) |
Wert1 -gt Wert2 | wahr, wenn Wert1 größer als Wert2 ist (greater then) |
Wert1 -le Wert2 | wahr, wenn Wert1 kleiner oder gleich Wert2 ist (less equal) |
Wert1 -ge Wert2 | wahr, wenn Wert1 größer oder gleich Wert2 ist (greater equal) |
Die interaktiven bash verwendet verschiedene Promptsymbole, auf die über die shell-Variablen PS1, PS2 und PS3 Einfluss genommen werden kann. Der Prompt PS1 wird angezeigt, wenn die bash bereit ist, Kommandos entgegenzunehmen. Der Prompt PS2 wird angezeigt, wenn weitere Eingaben zur Vervollständigung des aktuellen Kommandos nötig sind. Die bash erlaubt es, die Promptmeldungen den eigenen Bedürfnissen anzupassen. Dazu können eine Reihe von backslash-escape-Sequenzen verwendet werden, die eine besondere Bedeutung besitzen.
Escapesequenz | Bedeutung |
\a | bell, Glocke |
\d | Systemdatum im Format Wochentag Monat Datum (Tue May 26) |
\D{format} | frei formatierbares Datum, Formatierungssymbole siehe man 3 strftime |
\e | Escape-Zeichen (033) zur Terminalsteuerung |
\h | Hostname |
\H | FQ-Hostname |
\j | Anzahl der Jobs in der shell |
\l | Terminalname |
\n | newline, Zeilenschaltung |
\r | carriage return, Wagenrücklauf, Zeilenanfang |
\s | Name der shell ($0) |
\t | Systemzeit im 24-Stunden-Format HH:MM:SS |
\T | Systemzeit im 12-Stunden-Format HH:MM:SS |
\@ | Systemzeit im 12-Stunden-Format AM/PM |
\A | Systemzeit im 24-Stunden-Format HH:MM |
\u | Username des angemeldeten Benutzers |
\v | bash-Versionsnummer |
\V | bash-Versionsnummer und Release |
\w | Arbeitsverzeichnis |
\W | vollständiger Name des Arbeitsverzeichnisses |
\! | the history number of this command |
\# | the command number of this command |
\$ | wenn root angemeldet ist, so wird ein #-Zeichen zurückgegeben, ansonsten $ |
\nnn | Zeichen mit dem octalen Zeichencode nnn |
\\ | backslash |
\[ | Einleitung einer Escape-Sequenz |
\] | Abschluß einer Escape-Sequenz |
Eine Reihe von Kommandos sind bereits in die bash integriert, sogenannte interne Shellbefehle (builtin). Diese Befehle werden direkt in der Shellumgebung ausgeführt, dh. es ist nicht erforderlich eine eigene Subshell zu starten wie bei externen Kommandos. Dadurch ist der Ressoursenverbrauch entsprechend kleiner und die Ausführungszeiten sind kurz. Deshalb sind interne Shellbefehle den externen Kommandos auf jeden Fall vorzuziehen.
Befehl | |||||||||||||||||||||||||||||
Bedeutung | |||||||||||||||||||||||||||||
: [arguments] | |||||||||||||||||||||||||||||
Nullkommando. Verlangt die Syntax einen Befehl und man will jedoch nichts ausführen, dann verwendet man :. Es wird keine Expansion der Argumente durchgeführt. Der Rückgabewert ist 0(Null). |
|||||||||||||||||||||||||||||
# | |||||||||||||||||||||||||||||
Einleitung eines Kommentars. Alle Zeichen nach dem Kommandozeichen # auf einer Zeile werden als Kommentar interpretiert. |
|||||||||||||||||||||||||||||
. filename [arguments] source filename [arguments] | |||||||||||||||||||||||||||||
Punktkommando. Die Kommandos aus der Datei filename werden gelesen und ausgeführt. Der Rückgabewert entspricht dem exit-status des zuletzt ausgeführten Kommandos. Wenn die Kommandos fehlerfrei ausgeführt wurden, ist der Rückgabewert 0(Null). Wurde die Datei filename nicht gefunden oder war nicht lesbar, wird ein Rückgabewert >0 übergeben. Die Kommandos werden in der Shellumgebung ausgeführt, der Dateiinhalt wird eingesourct. Wenn die Datei filename ohne Pfadangabe erfolgt, dann muß sie im Suchpfad PATH zu finden sein. Übergebene Argumente werden expandiert und in den Positionsparametern zur Verfügung gestellt. Wenn keine Argumente übergeben werden, so bleiben die Positionsparameter unverändert. |
|||||||||||||||||||||||||||||
alias [-p] [name[=value] ...] | |||||||||||||||||||||||||||||
Mit dem alias-Kommando können Kürzel für Befehle definiert werden. Wird alias ohne Argumente oder mit der Option -p aufgerufen, so wird eine Liste der bereits definierten Aliase der Form name=wert nach Standardout ausgegeben. |
|||||||||||||||||||||||||||||
bg [jobspec] | |||||||||||||||||||||||||||||
Einen gestoppten Prozess in den Hintergrund schicken. |
|||||||||||||||||||||||||||||
bind [-m keymap] [-lpsvPSV] bind [-m keymap] [-q function] [-u function] [-r keyseq] bind [-m keymap] -f filename bind [-m keymap] -x keyseq:shell-command bind [-m keymap] keyseq:function-name bind readline-command | |||||||||||||||||||||||||||||
key-bindings. Tastenbelegung für Extrafunktionen der Kommandozeile festlegen. |
|||||||||||||||||||||||||||||
break [n] | |||||||||||||||||||||||||||||
Eine for, while, until oder select-Schleife wird vorzeitig verlassen. |
|||||||||||||||||||||||||||||
builtin shell-builtin [arguments] | |||||||||||||||||||||||||||||
Ein Builtin-Kommando ausführen. Damit kann erzwungen werden, dass ein internes Shellkommando ausgeführt wird, auch wenn es eine Funktion oder ein Alias mit dem gleichen Namen gibt. Der Rückgabewert ist >0, wenn das angegebene Kommando kein internes Shellkommando ist. |
|||||||||||||||||||||||||||||
cd [-L|-P] [dir] | |||||||||||||||||||||||||||||
Arbeitsverzeichnis wechseln. |
|||||||||||||||||||||||||||||
command [-pVv] command [arg ...] | |||||||||||||||||||||||||||||
Führt das Kommando command aus, auch wenn es eine Shellfunktion mit gleichem Namen gibt. Nur interne Shellkommandos oder externe Kommandos im Suchpfad PATH können damit ausgeführt werden. Mit der Option -p wird der Defaultwert für PATH verwendet. Damit wird sichergestellt, das alle Standardutilities des System verwendet werden können. Mit den Optionen -v und -V können verschiedene Informationen (verbose) zu dem geforderten Kommando erzeugt werden. Der Rückgabewert ist dann 0, wenn das Kommando gefunden wurde und 1 wenn es nicht gefunden wurde. Ohne diese Optionen -v/-V wird der Rückgabewert 127 erzeugt, wenn das Kommando nicht gefunden wurde. Ansonsten wird der Rückgabewert des Kommandos selbst zurückgegeben. |
|||||||||||||||||||||||||||||
compgen [option] [word] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
complete [-abcdefgjksuv] [-o comp-option] [-A action] [-G globpat] [-W wordlist] [-P prefix] [-S suffix][-X filterpat] [-F function] [-C command] name [name ...] complete -pr [name ...] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
continue [n] | |||||||||||||||||||||||||||||
Mit dem nächsten Schleifendurchlauf in while, until oder select fortfahren. |
|||||||||||||||||||||||||||||
declare [-afFirtx] [-p] [name[=value]] typeset [-afFirtx] [-p] [name[=value]] | |||||||||||||||||||||||||||||
Variablen deklarieren.
|
|||||||||||||||||||||||||||||
dirs [-clpv] [+n] [-n] | |||||||||||||||||||||||||||||
Ausgabe des Directorystacks der ehemaligen Arbeitsverzeichnisse. |
|||||||||||||||||||||||||||||
disown [-ar] [-h] [jobspec ...] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
echo [-neE] [arg ...] | |||||||||||||||||||||||||||||
Ausgabe von Text auf Standardout.
|
|||||||||||||||||||||||||||||
enable [-adnps] [-f filename] [name ...] | |||||||||||||||||||||||||||||
Schaltet ein builtin-Kommando ab/an. Mit -n wird abgeschaltet. |
|||||||||||||||||||||||||||||
eval [arg ...] | |||||||||||||||||||||||||||||
Argumente als Kommando ausführen. | |||||||||||||||||||||||||||||
exec [-cl] [-a name] [command [arguments]] | |||||||||||||||||||||||||||||
Überlagerung der Shell durch ein neues Kommando. |
|||||||||||||||||||||||||||||
exit [n] | |||||||||||||||||||||||||||||
Beendet die aktuelle Shell. |
|||||||||||||||||||||||||||||
export [-fn] [name[=word]] ... export -p | |||||||||||||||||||||||||||||
Exportiert Shell-Variablen in das Environment, womit diese den Subshells zur Verfügung stehen. |
|||||||||||||||||||||||||||||
fc [-e ename] [-nlr] [first] [last] fc -s [pat=rep] [cmd] | |||||||||||||||||||||||||||||
Zeigt die Befehls-History an oder führt bestimmte Befehle der History aus. |
|||||||||||||||||||||||||||||
fg [jobspec] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
getopts optstring name [args] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
hash [-lr] [-p filename] [-dt] [name] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
help [-s] [pattern] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
history [n] history -c history -d offset history -anrw [filename] history -p arg [arg ...] history -s arg [arg ...] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
jobs [-lnprs] [ jobspec ... ] jobs -x command [ args ... ] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ... kill -l [sigspec | exit_status] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
let arg [arg ...] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
local [option] [name[=value] ...] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
logout | |||||||||||||||||||||||||||||
Beendet die Login-Shell, Abmeldung. | |||||||||||||||||||||||||||||
popd [-n] [+n] [-n] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
printf format [arguments] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
pushd [-n] [dir] pushd [-n] [+n] [-n] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
pwd [-LP] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
read [-ers] [-u fd] [-t timeout] [-a aname] [-p prompt][-n nchars] [-d delim] [name ...] | |||||||||||||||||||||||||||||
read liest eine Zeile vom Standardinputkanal 0 (NUll) oder einem mit der Option -u angegebenen Filedeskriptor. Das erste gelesene Wort wird in der ersten mit [name] angegebenen Variable gespeichert. Das zweite Wort in der zweiten Variable usw. usf. Die Trennzeichen werden dabei entfernt. Wenn mehr Worte eingegeben werden, als Variablen angegeben sind, so speichert read den Rest der Eingabe mit den Trennzeichen in der letzten Variablen ab. Wurden weniger Worte eingegeben, als Variablen angegeben sind, so bleiben die überzähligen Variablen leer (Leerstring). Als Trennzeichen werden die Zeichen der Shellvariable IFS akzeptiert. Quotungen können mit einem backslash vorgenommen werden. Mit \<newline> kann die Eingabe auf der folgenden Zeile fortgesetzt werden. read kennt folgende Optionen:
Wurden read keine Variablen oder ein Array zum ablegen der gelesenen Daten übergeben, so speichert es diese in der Shellvariable REPLY ab. Der exit-Code von read ist 0 (wahr), außer es wurde ein EOF (end-of-file) erkannt, ein read-Timeout ausgelöst oder ein fehlerhafter Filedeskriptor, je nach den Vorgaben der Option -u, festgestellt. |
|||||||||||||||||||||||||||||
readonly [-apf] [name ...] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
return [n] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
set [--abefhkmnptuvxBCHP] [-o option] [arg ...] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
shift [n] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
shopt [-pqsu] [-o] [optname ...] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
suspend [-f] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
test expr [ expr ] | |||||||||||||||||||||||||||||
Das Kommando test prüft eine oder mehrere Bedingungen expr und gibt als Ergebnis der Prüfung den exit-Code 0 für wahr und den exit-Code 1 für falsch zurück. Die Bedingungen können durch logische Operatoren miteinander verknüpft werden. In der folgenden Liste sind diese Operatoren nach ihrem Rang aufgelistet.
|
|||||||||||||||||||||||||||||
times | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
trap [-lp] [arg] [sigspec ...] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
type [-aftpP] name [name ...] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
ulimit [-SHacdflmnpstuv [limit]] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
umask [-p] [-S] [mode] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
unalias [-a] [name ...] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
unset [-fv] [name ...] | |||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
wait [n] | |||||||||||||||||||||||||||||
|
Datei | Bedeutung |
/bin/bash | Das bash-binary, eine ausführbare Datei |
/etc/profile |
Systemweite Initialisierungsdatei für die bash. Diese Datei wird von einer interaktiven Login-Shell abgearbeitet und setzt systemweite, vom User im allgemeinen nicht veränderbare Einstellungen. |
~/.profile |
Diese Datei ist die lokale benutzerdefinierte Konfigurationsdatei für eine interaktive Login-Shell, die der User seinen eigenen Bedürfnissen anpassen kann. Sie wird nur verwendet, wenn keine ~/.bash_profile oder ~/.bash_login existiert. |
~/.bash_profile |
Diese Datei ist die lokale benutzerdefinierte Konfigurationsdatei für eine interaktive Login-Shell, die der User seinen eigenen Bedürfnissen anpassen kann. |
~/.bash_login |
Diese Datei hat die gleiche Bedeutung wie ~/.bash_profile. Sie wird verwendet, wenn ~/.bash_profile nicht existiert, ansonsten wird sie danach ausgeführt. |
~/.bashrc |
Diese Datei ist die lokale benutzerdefinierte Konfigurationsdatei für jede interaktive Shell, die keine Login-Shell ist. Diese Datei kann der User nach seinen Bedürfnissen anpassen. |
~/.bash_logout |
Diese Datei ist die lokale benutzerdefinierte Logout-Datei. Sie wird bei Beendigung oder Abmeldung aus einer interaktiven Login-Shell ausgeführt und kann zB. für Aufräumarbeiten genutzt werden. |
/etc/inputrc |
Diese Datei ist die systemweite Initialisierungsdatei für die Vorbelegung der Tastatur in der bash zur Konfiguration von readline. |
~/.inputrc |
Diese Datei enthält die lokale benutzerdefinierte readline-Konfiguration. |