Bourne Again Shell
Die Shell Bourne-Again Shell / Bash ist die konsequente Weiterentwicklung der Bourne-Shell auf GNU/Linux-Systemen, zusätzlich sind viele Fähigkeiten der Korn-Shell und der C-Shell implementiert. Sie ist die Standard-Shell der meisten Linux-Systeme, ist aber auch auf anderen Unix-Systemen und sogar für OS/2 oder Microsoft Windows verfügbar.
Unter Linux gibt es keine Bourne-Shell mehr, der Standardeintrag "/bin/sh" ist ein Link auf "/bin/bash". Da die Bourne-Again-Shell eine Obermenge der Bourne-Shell ist, wird keine separate Bourne-Shell benötigt. Zum Feststellen der installierten Version der Bourne-Again-Shell dienen folgende Befehle.
$ echo $BASH_VERSION $ bash --version
Es gibt einige Befehle, die nicht als eigenständige Programme im System, sondern als Bestandteil der Shell bereits von der Bash selbst ausgeführt werden (bash builtin commands). Neben "man bash" steht mit "man bashbuiltins" ein zusätzliches Handbuch zur Verfügung.
Befehlssatz
Ausgabe des eingebauten Befehlssatzes.
$ help
GNU bash, version 3.2.13(1)-release (i486-pc-linux-gnu)
JOB_SPEC [&] (( expression )) . filename [arguments] : [ arg... ] [[ expression ]] alias [-p] [name[=value] ... ] bg [job_spec ...] bind [-lpvsPVS] [-m keymap] [-f fi break [n] builtin [shell-builtin [arg ...]] caller [EXPR] case WORD in [PATTERN [| PATTERN]. cd [-L|-P] [dir] command [-pVv] command [arg ...] compgen [-abcdefgjksuv] [-o option complete [-abcdefgjksuv] [-pr] [-o continue [n] declare [-afFirtx] [-p] [name[=val dirs [-clpv] [+N] [-N] disown [-h] [-ar] [jobspec ...] echo [-neE] [arg ...] enable [-pnds] [-a] [-f filename] eval [arg ...] exec [-cl] [-a name] file [redirec [[exit [n] export [-nf] [name[=value] ...] or false fc [-e ename] [-nlr] [first] [last fg [job_spec] for NAME [in WORDS ... ;] do COMMA for (( exp1; exp2; exp3 )); do COM function NAME { COMMANDS ; } or NA getopts optstring name [arg] hash [-lr] [-p pathname] [-dt] [na help [-s] [pattern ...] history [-c] [-d offset] [n] or hi if COMMANDS; then COMMANDS; [ elif jobs [-lnprs] [jobspec ...] or job kill [-s sigspec | -n signum | -si let arg [arg ...] local name[=value] ... logout popd [+N | -N] [-n] printf [-v var] format [arguments] pushd [dir | +N | -N] [-n] pwd [-LP] read [-ers] [-u fd] [-t timeout] [ readonly [-af] [name[=value] ...] return [n] select NAME [in WORDS ... ;] do CO set [--abefhkmnptuvxBCHP] [-o opti shift [n] shopt [-pqsu] [-o long-option] opt source filename [arguments] suspend [-f] test [expr] time [-p] PIPELINE times trap [-lp] [arg signal_spec ...] true type [-afptP] name [name ...] typeset [-afFirtx] [-p] name[=valu ulimit [-SHacdfilmnpqstuvx] [limit umask [-p] [-S] [mode] unalias [-a] name [name ...] unset [-f] [-v] [name ...] until COMMANDS; do COMMANDS; done variables - Some variable names an wait [n] while COMMANDS; do COMMANDS; done { COMMANDS ; }
Variablen
set zeigt alle Variablen und die dazugehörigen Werte.
Anzeige des aktuellen Shell-Zustands. Gezeigt wird, welche Bash-internen Werkzeuge standardmässig aktiviert sind.
$ set -o
Anzeige einer Liste der durch die Bash reservierten Variablennamen.
$ help variables
Einige sitzungsweit gültige Shellvariablen lädt der Befehlsinterpreter bei seiner Initialisierung aus der Systemdatei "/etc/profile" sowie aus folgenden anwenderspezifischen Dateien:
- "$HOME/.bash_profile" (bash-Login)
- "$HOME/.bashrc"
- "$HOME/.login" (csh-Login)
- "$HOME/.profile" (sh- und ksh-Login)
Umgebungsvariablen
Darüberhinaus werden viele Umgebungsvariablen automatisch gesetzt, die meisten davon dürfen durch den Benutzer geändert werden und auf alle Variablen darf lesend zugegriffen werden. Die vollständige Liste aller Umgebungsvariablen der Bash findet sich in der zugehörigen man page.
Umgebungsvariable | Beschreibung |
---|---|
BASH_VERSION | Versionsinformation der aktuellen Bash. |
CDPATH | Eine durch Doppelpunkte getrennte Liste von Verzeichnissen, die durchsucht werden, wenn das Argument für cd nicht im aktuellen Verzeichnis gefunden wird. |
EDITOR | Standard-Texteditor. Standardmässig wird vi verwendet. |
ENV | Name der Datei, die die Voreinstellungen der Korn-Shell enthält. Normalerweise "$HOME/.kshrc". |
EUID | Die effektive Benutzerkennung (Nummer). |
EXINIT | Voreinstellungen für die Editoren ex bzw. vi, z. B. EXINIT="set number showmode" |
GLOBIGNORE | Eine durch Doppelpunkte getrennte Liste von Dateinamenmustern, die bei der Dateinamenexpansion ignoriert werden sollen. |
HISTFILE | Name der Datei, in der die Befehlshistory gespeichert wird. Vorgabewert ist "~/.bash_history". |
HISTFILESIZE | Maximale Anzahl Zeilen, welche die Datei $HISTFILE enthalten kann. |
HISTIGNORE | Eine durch Doppelpunkte getrennte Liste von Mustern zum Entscheiden, welche Befehle in der history-Liste gespeichert werden sollen. |
HISTSIZE | Maximale Anzahl History-Zeilen, auf die eine laufende Shell zugreifen kann. |
HOME | Der absolute Pfadname zum login-Verzeichnis des aktuellen Benutzers (Standardverzeichnis für den Befehl cd), so wie es in der Datei "/etc/passwd" hinterlegt wurde. Die Tilde "~" kann sowohl für Benutzereingaben als auch für Shellausgaben als Abkürzung für "$HOME" verwendet werden. |
HOST / HOSTNAME | Rechnername des aktuellen Rechners. |
HOSTTYPE | Prozessortyp, unter dem die aktuelle bash läuft. Beispiel: "i386" |
$IFS | Interner Feldtrenner. Die Shell-Befehlszeilen werden anhand dieser Variable in Elemente zerlegt. Alle angegebenen Zeichen können als Trenner von Wörtern benutzt werden. Standardmässig ist die Variable mit den sogenannten whitespaces (Leerzeichen und Tabulator) und newline (Zeilenvorschub) vorbelegt: IFS=$' \t\n' |
IGNOREEOF | Kontrolliert das Verhalten der shell beim Erhalt eines EOF-Zeichens als einzige Eingabe. Die dem EOF-Zeichen zugewiesene Tastenkombination (meist "CTRL d") kann genau wie exit zum Beenden der aktuellen shell verwendet werden. Wenn gesetzt, dann entspricht der Wert der Anzahl EOF-Zeichen, die auf einer Zeile nacheinander angezeigt werden können, bevor die shell sich beendet (Standard sind 10). Wenn nicht gesetzt, bezeichnet EOF das Ende der Eingabe. |
LANG | Sprache, in der Systemmeldungen erfolgen sollen (soweit vorhanden). In dieser Sprache erfolgen die Programmausgaben, Datumsformat usw., sofern keine der "LC_"-Variablen (sieh unten) gesetzt sind. Eine Liste der definierten Sprachvariablen zeigt der Befehl locale. LANG=de_DE@euro |
LC_ALL | Ländereinstellung, z. B. "C" oder "de". Diese Variable setzt "LANG" und alle anderen "LC_"-Variablen ausser Kraft. |
LC_MESSAGES | Sprache für Programm- und Fehlermeldungen. |
LC_TIME | Zeitformat. |
LOGNAME | Login-Name des Benutzers. |
MACHTYPE | Eine Zeichenfolge, die das System beschreibt, unter dem die aktuelle bash läuft. Beispiel: "i686-suse-linux" |
Pfad zur Mailbox des aktuellen Benutzers (eingehende Post). | |
MAILCHECK | Die Häufigkeit (in Sekunden), mit der bash nach neuer mail sieht. |
MAILPATH | Eine durch Doppelpunkte getrennte Liste von Dateien, die bash nach neuer mail durchsucht. |
MANPATH | Suchpfad zu den installierten man-Pages. |
OSTYPE | Die Version von Unix, auf der die aktuelle bash läuft. |
PATH | Der absolute Suchpfad für ausführbare Programme: eine durch Doppelpunkte getrennte Liste von Verzeichnissen, die bei der Suche nach Befehlen von links nach rechts durchsucht werden, bis ein Verzeichnis mit dem entsprechenden Binärprogramm gefunden ist. Aus Sicherheitsgründen sollte das aktuelle Verzeichnis in der Variable "$PATH" für den Benutzer "root" nicht vorkommen. Unter SuSE kann dies in der Datei "/etc/sysconfig/suseconfig" durch Setzen der Variable "CWD_IN_ROOT_PATH=no" erreicht werden. Beispiel: |
PPID | PID des Elternprozesses der Shell. |
PRINTER | Bezeichnung des Standarddruckers. |
PROMPT_COMMAND | Ein Befehl, der vor dem Ausgeben des primären prompts ausgeführt werden soll. |
PS1 | Die den primären prompt (Standardeingabeprompt) beschreibende Zeichenfolge.
Beispiel: PS1=$'\\u@\\h:\\w> ' Standardbelegung unter SUSE Linux Enterprise Server 10 Standardbelegung unter Ubuntu 7.04: |
PS2 | Die den sekundären prompt beschreibende Zeichenfolge, der nach Eingabe unvollständiger Befehle oder beim Fehlen schliessender Klammern erscheint, also z. B. beim Umbruch einer unvollständigen Befehlszeile mit RETURN. Standardzeichen ist ">". |
PS3 | Verwendet die "select"-Kontrollstruktur der Bash. |
PS4 | Erscheint beim Debugging eines Skripts vor jeder Zeile. |
PWD | Der volle Pfadname zum aktuellen Verzeichnis. |
SHELL | Voller Pfadname der aktuellen Shell, z. B. "/bin/bash". |
SHELLOPTS | Eine durch Doppelpunkte getrennte Liste von eingeschalteten Shelloptionen. |
TERM | Der Name des aktuellen Terminaltyps der Dialogstation, z. B. "xterm" oder "vt220". Wichtig für viele bildschirmorientierte Programme wie die grafische Oberfläche, vi, more, usw. |
TIMEFORMAT | Das Ausgabeformat für Zeitangaben, das vom Befehl "time" verwendet wird. |
TZ | Angaben zur Zeitzone, z. B. "CET" oder "MET". Diese Variable wird z. B. für die automatische Berechnung der Ortszeiten bei mail verwendet. |
UID | Benutzerkennung gemäss der Datei "/etc/password", z. B. "500". |
VISUAL | Ist diese Variable belegt, kann die Befehlszeile editiert werden. |
auto_resume | Non-null means a command word appearing on a line by itself is first looked for in the list of currently stopped jobs. If found there, that job is foregrounded. A value of `exact' means that the command word must exactly match a command in the list of stopped jobs. A value of 'substring' means that the command word must match a substring of the job. Any other value means that the command must be a prefix of a stopped job. |
histchars | Characters controlling history expansion and quick substitution. The first character is the history substitution character, usually '!'. The second is the 'quick substitution' character, usually '^'. The third is the 'history comment' character, usually '#'. |
Positionsparameter
Innerhalb eines Shellskripts stehen weitere Shellvariablen zur Verfügung. Die Shell analysiert den Befehlsaufruf und erkennt, getrennt durch ein oder mehrere Leerzeichen, folgende Teile:
Parameter | Beschreibung |
---|---|
$0 | Name des Shellskripts |
$1 | Wert des 1. Parameters |
$2 | Wert des 2. Parameters, usw. |
$* | Werte aller angegebenen Parameter |
$@ | Alle Parameter |
$# | Anzahl der Parameter |
$? | Exit-Status des letzten Befehls |
$$ | Prozessnummer des Shellskripts |
Beispielskript:
#!/bin/sh # # Name: posi # Beschreibung: Ausgabe der einzelnen Positionsparameter # Parameter: Beliebig #------------------------------------------------------- # echo "Der Name des Shellskripts lautet: $0" echo "Es wurden $# Parameter angegeben." echo "Der 1. Parameter lautet: $1" echo "Der 2. Parameter lautet: $2" echo "Der 3. Parameter lautet: $3" echo "Dies sind alle angegebenen Parameter: $*" echo "Die PID des Shellskripts lautet: $$"
Terminaleinstellungen
LINES | Eine Zahl, die die Höhe des Anzeigebildschirms in Zeilen angibt. |
COLUMNS | Eine Zahl, die die Breite des Anzeigebildschirms in Zeichen angibt. |
DISPLAY | Wird vom X Window System verwendet, wo Programme die auf dem aktuellen Terminal ausgeführt werden, gezeichnet werden sollen. Die Variable besteht aus einem Rechnernamen (bzw. dem Namen des X-Terminals), einem Doppelpunkt und einer Nummer des Bildschirms, auf dem eine Anwendung ausgeführt werden soll (diese Nummer besteht aus zwei durch einen Punkt getrennten Zahlen), z. B. "meister:0.0". |
TERM | Art des verwendeten Displays. Die Fähigkeiten der verschiedenen terminals sind in der Datei "/etc/termcap" beschrieben. Zu den bekanntesten gehören vt100, vt102 und vt220. |
Tastaturfunktionen
Normalerweise kann mit den Pfeiltasten durch die bisherigen Befehle navigiert werden. Für mächtigere Befehle werden die Tastenkombinationen von "emacs" verwendet. Wie bei der Korn-Shell können mit "set -o vi" die Tastenkombinationen des "vi" aktiviert werden. Ebenfalls sind die History-Funktionen der C-Shell implementiert:
Tasten- kombination |
Beschreibung |
---|---|
TAB | vervollständigt Umgebungsvariablen sowie Verzeichnis- und Dateinamen, die über den Pfad der Variable "PATH" erreichbar sind. |
CTRL+A | bewegt den Cursor an den Anfang der Zeile |
CTRL+E | bewegt den Cursor ans Ende der Zeile |
CTRL+D DEL |
löscht die Zeichen unter dem Cursor |
Backspace | löscht ein Zeichen nach links |
CTRL+K | löscht von der Cursorposition bis ans Ende der Zeile |
CTRL+U | löscht von der Cursorposition bis an den Anfang der Zeile |
CTRL+R | für inkrementelles Suchen in der History. Am erscheinenden prompt kann ein Bestandteil des gesuchten Befehls eingegeben werden. "Ctrl R" zum Weitersuchen in der History. Nach Eingabe von "Esc" kann der gefundene Befehl vor dem Ausführen noch verändert werden. "Return" zum Abschicken des Befehls. |
CTRL+L | löscht den Inhalt des Terminal-Fensters (wie clear) |
Startup-Skripte
Bei Start der Bourne-Again-Shell als Login-Shell werden folgende Dateien abgearbeitet (falls sie vorhanden sind):
- "/etc/profile" (gilt für alle Benutzer und sorgt für eine gleiche Startumgebung)
- nacheinander wird nach "~/.bash_profile" bzw. "~/.bash_login" bzw. "~/.profile" (Benutzereinstellungen) gesucht. Wird eine dieser Dateien gefunden, so wird nicht weiter nach einer anderen dieser Dateien gesucht.
Wird die Bourne-Again-Shell als Non-Login-Shell ausgeführt, werden folgende Dateien abgearbeitet (falls sie vorhanden sind). Als solche interaktive Shell gelten z. B. alle Shells, die aus einer anderen Shell heruas aufgerufen werden - dazu gehören auch X-Terminals oder andere Konsolenprogramme unter der grafischen Benutzeroberfläche.
- "/etc/bash.bashrc" (systemweite Datei)
- "~/.bashrc" (benutzerbezogene Datei)
Um also immer dieselbe Umgebung zur Verfügung zu haben, wird die Datei "~/.bash_profile" erstellt, in der sich eine Reihe nützlicher Befehle befinden - der erste davon ist "source $HOME/.bashrc", mit dem die Umgebungsvariablen und die komplette Konfiguration gesetzt wird. Grundsätzlich sollten die Befehle wie folgt verteilt werden:
- die Datei ".bash_profile" enthält alles, was nur bei Anmelden an einen Rechner ausgeführt werden soll.
- die Datei ".bashrc" enthält alles, was in jedem beliebigen Terminalfenster gesetzt werden soll - also wohl der Grossteil der Konfiguration. An ihrem Ende befindet sich z. B. der Aufruf der Datei ".alias", in der typischerweise alle alias-Definitionen gesammelt sind.
Beim Ausloggen wird ausserdem die die Datei "~/.bash_logout" ausgeführt.
Prompt
Das Aussehen des Prompts als Eingabeaufforderung nach dem Ausführen eines Befehls wird durch die Umgebungsvariable "$PS1" festgelegt. Diese wird am besten in der Konfigurationsdatei "~/.bashrc" gesetzt.
Der Prompt kann mit Hilfe besonderer Escape-Sequenzen gestaltet werden, u. a.
Zeichen | Beschreibung |
---|---|
\e | Das Zeichen für "Escape" ("^["). |
\h | Hostname des Rechners in Kurzform (bis zum ersten Punkt). |
\n | Zeilenvorschub |
\r | Wagenrücklauf |
\u | Benutzername |
\w | Das aktuelle Arbeitsverzeichnis mit voller Pfadangabe. |
\W | Das aktuelle Arbeitsverzeichnis, auf das gegenwärtige Verzeichnis beschränkt. |
\! | Reihenfolge des Befehls in der Bash-History, z. B. "89" für den 89. ausgeführten Befehl. |
\$ | Anzeige eines Dollarzeichens ("$") für alle Benutzer, die nicht die UID 0 (root) haben, andernfalls ein Rautezeichen ("#"). |
\nnn | Dreistellige Oktalzahl "nnn", mit der jedes beliebige ASCII-Zeichen dargestellt werden kann, z. B. "\033" für "Escape". |
\\ | Ein umgekehrter Schrägstrich ("\"). |
\[ | Einleitung für nachfolgende Steuerzeichen, etwa ANSI-Escape- oder ANSI-Steuersequenzen für den Cursor. |
\] | Abschluss der Eingabe von Steuerzeichen. |
Weblinks
- Die Bash, das unbekannte Wesen (Linux-User.de) - Bash-History
- An A-Z Index of the Linux BASH command line