<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Bash_%28Shell%29</id>
	<title>Bash (Shell) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Bash_%28Shell%29"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Bash_(Shell)&amp;action=history"/>
	<updated>2026-05-24T10:29:47Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Bash_(Shell)&amp;diff=1588230&amp;oldid=prev</id>
		<title>77.117.32.244: /* Login-Shell */ tippfehler (fehlender abstand) korrigiert</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Bash_(Shell)&amp;diff=1588230&amp;oldid=prev"/>
		<updated>2025-06-13T15:34:21Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Login-Shell: &lt;/span&gt; tippfehler (fehlender abstand) korrigiert&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox Software&lt;br /&gt;
 | Name= Bash — The Bourne-again shell&lt;br /&gt;
 | Logo= [[Datei:Gnu-bash-logo.svg|250px]]&lt;br /&gt;
 | Screenshot= [[Datei:Bash demo.png|260px]]&lt;br /&gt;
 | Beschreibung= Beispiel einer bash-Sitzung&lt;br /&gt;
 | Hersteller= ursprünglich Brian Fox&lt;br /&gt;
 | AktuelleVersion= &amp;lt;!-- Bei Wikidata eintragen --&amp;gt;&lt;br /&gt;
 | AktuelleVersionFreigabeDatum= &amp;lt;!-- Bei Wikidata eintragen --&amp;gt;&lt;br /&gt;
 | Betriebssystem= verschiedene&lt;br /&gt;
 | Programmiersprache = &amp;lt;!-- Bei Wikidata eintragen --&amp;gt;&lt;br /&gt;
 | Kategorie= [[Kommandozeileninterpreter]]&lt;br /&gt;
 | Lizenz= &amp;lt;!-- Bei Wikidata eintragen --&amp;gt;&lt;br /&gt;
 | Deutsch= Teilweise&lt;br /&gt;
 | Website= &amp;lt;!-- Bei Wikidata eintragen --&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Bash&amp;#039;&amp;#039;&amp;#039; (auch &amp;#039;&amp;#039;&amp;#039;BASH&amp;#039;&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;&amp;#039;bash&amp;#039;&amp;#039;&amp;#039;), die &amp;#039;&amp;#039;&amp;#039;Bourne-again shell&amp;#039;&amp;#039;&amp;#039;, ist eine [[Freie Software|freie]] [[Unix-Shell]] unter [[GPL]].&lt;br /&gt;
&lt;br /&gt;
Als [[Shell (Betriebssystem)|Shell]] ist Bash eine [[Mensch-Maschine-Schnittstelle]], die eine Umgebung ({{enS|environment}}) bereitstellt, in der zeilenweise Text[[Eingabe (Computer)|eingaben]] und -[[Ausgabe (Computer)|ausgaben]] möglich sind. Letzteres erfolgt über die [[Befehlszeile]], in die Befehle eingetippt und durch Betätigen der [[Eingabetaste]] eingegeben werden. Gleichzeitig ist Bash eine [[Skriptsprache]], die schon beim Booten vieler [[Linux-Distribution]]en zum Einsatz kommt.&lt;br /&gt;
&lt;br /&gt;
Bash ist elementarer Bestandteil des unixähnlichen Betriebssystems [[GNU]] und gehört zum [[GNU-Projekt]]. Auch bei den meisten auf [[Linux|GNU/Linux]] aufbauenden Betriebssystemen ist Bash die voreingestellte Shell. Darüber hinaus war Bash 3.x von 2003 bis 2019 die voreingestellte Shell in [[macOS]] von [[Apple]] (10.3–10.14)&amp;amp;nbsp;– wurde allerdings aus lizenzrechtlichen Gründen nie auf Version 4.0 oder höher aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Der Name &amp;#039;&amp;#039;Bash&amp;#039;&amp;#039; ist im Englischen mehrdeutig ({{lang|en|[to] bash, [the] bash}}) und erfuhr im Laufe der Zeit weitere, meist humoristische Bedeutungen.&lt;br /&gt;
&lt;br /&gt;
== Geschichte ==&lt;br /&gt;
[[Brian Fox]] schrieb die Bash 1987 für das [[GNU-Projekt]] und wurde dabei von der [[Free Software Foundation|FSF]] bezahlt.&amp;lt;ref&amp;gt;{{Internetquelle |url=https://www.gnu.org/gnu/thegnuproject.html |titel=The GNU Project |autor=[[Richard Stallman]] |abruf=2024-02-14}}&amp;lt;/ref&amp;gt; 1990 wurde das Projekt von [[Chet Ramey]] übernommen. Version 3 erschien am 27. Juli 2004. Version 4 erschien am 20. Februar 2009 und brachte einige Neuerungen mit sich. Darunter sind eine neue [[Standard-Datenströme|Ausgabeumleitung]], [[Assoziatives Datenfeld|assoziative Arrays]] und eine neue [[Wildcard (Informatik)|Wildcard]] (&amp;lt;code&amp;gt;**&amp;lt;/code&amp;gt;).&amp;lt;ref&amp;gt;[https://www.heise.de/ix/meldung/Unix-Linux-Shell-Bash-in-Version-4-199809.html heise.de]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://tiswww.case.edu/php/chet/bash/NEWS NEWS]&amp;lt;/ref&amp;gt; Am 7. Januar 2019 folgte Bash 5, zu den Neuerungen zählten diesmal etliche ergänzte Shellvariablen, eine flexiblere Handhabung der Historie und die Möglichkeit, die Werte lokaler Variablen aus einem [[Variable (Programmierung)#Sichtbarkeitsbereich von Variablen (Scope)|übergeordneten Scope]] zu übernehmen.&amp;lt;ref&amp;gt;[https://lists.gnu.org/archive/html/info-gnu/2019-01/msg00010.html Bash-5.0 release available] Chet Ramey, 7. Januar 2019, abgerufen am 12. Oktober 2020.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funktionalität ==&lt;br /&gt;
&lt;br /&gt;
=== Vergleich mit anderen Shells ===&lt;br /&gt;
Die Shell ist weitgehend kompatibel zur [[Unix-Shell#Die Bourne-Shell|Bourne-Shell (sh)]] und beherrscht zusätzlich sowohl die meisten Funktionen der [[Kornshell]] (ksh) als auch Teile der [[Unix-Shell#Die C-Shell|C-Shell]]-[[Syntax]], wie zum Beispiel die Historie zuvor eingegebener Befehle, die &amp;lt;code&amp;gt;$RANDOM&amp;lt;/code&amp;gt;-Variable und die [[Portable Operating System Interface|POSIX]]-Form der Befehlssubstitution &amp;lt;code&amp;gt;$(...)&amp;lt;/code&amp;gt; wurden übernommen. Einige Elemente wie etwa die &amp;lt;code&amp;gt;**&amp;lt;/code&amp;gt;-Wildcard wurden von der [[Z shell]] (zsh) übernommen. Auch wurde sie um Funktionen wie z.&amp;amp;nbsp;B. die Ganzzahlarithmetik ohne die Ausführung externer Prozesse und Vereinfachung der I/O-Umleitungen erweitert. Bash bietet anhand ihrer benutzerspezifischen Konfigurationsdatei &amp;lt;code&amp;gt;~/.bashrc&amp;lt;/code&amp;gt; außerdem die Möglichkeit, jedem Benutzer eigene Einstellungen, wie eine individuelle Gestaltung der [[Eingabeaufforderung]] ({{enS|prompt}}), sitzungsübergreifend zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
=== Subshell ===&lt;br /&gt;
Eine Subshell ist ein Shellprozess, der von einer Shell erzeugt wurde. Programme, die durch Eingabe eines Kommandos in eine Shell zur Ausführung gebracht werden, werden betriebssystembedingt in einer Subshell gestartet: Bevor die Shell ein Programm als [[Prozess (Informatik)|Kindprozess]] starten kann, muss sie einen Shellprozess erzeugen. Bei der Ausführung eines Programms aus der grafischen Benutzeroberfläche heraus ist jedoch keine Shell oder Subshell involviert.&lt;br /&gt;
&lt;br /&gt;
Subshells werden automatisch bei der Verwendung einer Reihe von Bashfeatures erzeugt. Beispielsweise werden alle Befehle einer [[Pipe (Informatik)|Pipeline]] in einer eigenen Subshell ausgeführt. Shells in grafischen Oberflächen, wie &amp;lt;code&amp;gt;kterm&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;[[Gnome Terminal|gnome-terminal]]&amp;lt;/code&amp;gt;, sind &amp;#039;&amp;#039;keine&amp;#039;&amp;#039; Subshells, da ihr Elternprozess keine Shell ist.&lt;br /&gt;
&lt;br /&gt;
=== Login-Shell ===&lt;br /&gt;
Wird die Bash mit einem Programm gestartet, das der Anmeldung an der Konsole dient, wie z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;login&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;su - &amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; o.&amp;amp;nbsp;ä., oder mit der Option &amp;lt;code&amp;gt;-l&amp;lt;/code&amp;gt; aufgerufen, fungiert sie als interaktive Login-Shell. Die Verwendung der Bash als Login-Shell für einen Benutzer wird durch den entsprechenden Benutzereintrag in der &amp;lt;code&amp;gt;/etc/passwd&amp;lt;/code&amp;gt; festgelegt. Das Verhalten einer Login-Shell weicht von dem einer Nicht-Login-Shell ab. Wie jede Shell liest die Bash (zunächst) die systemweite Konfigurationsdatei &amp;lt;code&amp;gt;/etc/profile&amp;lt;/code&amp;gt; und führt die darin enthaltenen Anweisungen aus, danach sucht sie im [[Benutzerverzeichnis]] des angemeldeten Benutzers der Reihe nach &amp;lt;code&amp;gt;~/.bash_profile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;~/.bash_login&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;~/.profile&amp;lt;/code&amp;gt;, wobei nur die erste gefundene Datei gelesen wird. Mit dem Beenden der Login-Shell wird der angemeldete Benutzer abgemeldet, was mit den Kommandos &amp;lt;code&amp;gt;logout&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt; erfolgt, oder per [[Tastenkombination]] {{Taste|[[Steuerungstaste|Strg]]|halten}}+{{Taste|D}} (dargestellt mit &amp;lt;code&amp;gt;^D&amp;lt;/code&amp;gt;, in englischen Anleitungen wie z.&amp;amp;nbsp;B. [[manpage]]s meist „CTRL-D“ bezeichnet, oder auf Deutsch „STRG-D“). Bei der Abmeldung wird – sofern vorhanden – die &amp;lt;code&amp;gt;~/.bash_logout&amp;lt;/code&amp;gt; ausgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
Die Bash wird durch eine Reihe von Konfigurationsdateien konfiguriert. Hierbei ist zu unterscheiden zwischen systemweiter und benutzerspezifischer Konfiguration.&lt;br /&gt;
Die systemweiten Einstellungen der Bash werden — je nach [[Linux-Distribution|Distribution]] — in der &amp;lt;code&amp;gt;/etc/bash.bashrc&amp;lt;/code&amp;gt; oder der &amp;lt;code&amp;gt;/etc/bashrc&amp;lt;/code&amp;gt; gespeichert. Die systemweite &amp;lt;code&amp;gt;/etc/profile&amp;lt;/code&amp;gt; wird schon durch die Login-Shell ausgewertet.&lt;br /&gt;
Das Shell-Profil wird jedes Mal ausgeführt, wenn eine Shell-Instanz startet, also auch (aber nicht nur) dann, wenn eine Login-Shell gestartet wird.&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;lt;code&amp;gt;/etc/skel&amp;lt;/code&amp;gt; werden Schablonen der Konfigurationsdateien bereitgestellt, die in das Heimatverzeichnis eines neu erstellten Benutzers kopiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Eingebaute Befehle ===&lt;br /&gt;
Die Bash enthält zahlreiche eingebaute Befehle und reservierte Wörter. Zu den eingebauten Befehlen zählen beispielsweise &amp;lt;code&amp;gt;[[alias (Unix)|alias]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[cd (Kommandozeilenbefehl)|cd]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[echo (Kommando)|echo]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;help&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[kill (Unix)|kill]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;logout&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;[[pwd (Unix)|pwd]]&amp;lt;/code&amp;gt; und zu den reservierten Wörtern zählen die für die Bash-Programmierung nötigen Schlüsselwörter wie &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;function&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Platzhalter ===&lt;br /&gt;
Als [[Wildcard (Informatik)|Platzhalter]] verwendet die Bash den &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; für beliebig viele Zeichen (also auch keines) und das &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; für genau ein Zeichen. Mit &amp;lt;code&amp;gt;[&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;]&amp;lt;/code&amp;gt; lassen sich auch Zeichenmengen und mit &amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt; sogenannte Klammerexpansion angeben.&lt;br /&gt;
Beispiele:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
user1@blablubb:~/test$ ls datei*&lt;br /&gt;
datei datei1 datei2 datei3 datei4 datei5 datei6     # Auch &amp;#039;datei&amp;#039; ohne Nummer&lt;br /&gt;
user1@blablubb:~/test$ ls datei?&lt;br /&gt;
datei1 datei2 datei3 datei4 datei5 datei6&lt;br /&gt;
user1@blablubb:~/test$ ls datei[1-3]                # Wertebereich&lt;br /&gt;
datei1 datei2 datei3&lt;br /&gt;
user1@blablubb:~/test$ ls datei[135]                # Wertemenge&lt;br /&gt;
datei1 datei3 datei5&lt;br /&gt;
user1@blablubb:~/test$ touch test{1..5}             # Wertebereich für Klammerexpansion&lt;br /&gt;
user1@blablubb:~/test$ ls test*&lt;br /&gt;
test1 test2 test3 test4 test5&lt;br /&gt;
user1@blablubb:~/test$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ein- und Ausgabe, Umleitung ===&lt;br /&gt;
Wie in [[Unix]] üblich, unterstützt die Bash die Umlenkung der drei Standard-[[Datenstrom|Datenströme]] (auch Standardkanäle), die mittels der sogenannten [[Dateideskriptor]]en gehandhabt werden. Es sind dies die Standardeingabe &amp;lt;code&amp;gt;stdin&amp;lt;/code&amp;gt; (Kanal 0), die Standardausgabe &amp;lt;code&amp;gt;stdout&amp;lt;/code&amp;gt; (Kanal 1) und die Standardfehlerausgabe &amp;lt;code&amp;gt;stderr&amp;lt;/code&amp;gt; (Kanal 2). Ein in der Bash ausgeführtes Programm liest von der Standardeingabe, üblicherweise die Tastatur, und gibt das Ergebnis an die Standardausgabe weiter, üblicherweise der Bildschirm. Gewöhnlich werden Fehlermeldungen über die Standardfehlerausgabe &amp;lt;code&amp;gt;stderr&amp;lt;/code&amp;gt; auf der Standardausgabe &amp;lt;code&amp;gt;stdout&amp;lt;/code&amp;gt;, also am Bildschirm ausgegeben, wie das folgende Beispiel verdeutlicht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
user@blablubb:~/test$ ls -l /root ~/test&lt;br /&gt;
/home/user/test:&lt;br /&gt;
insgesamt 0&lt;br /&gt;
-rw-r--r-- 1 user1 users 0 Feb 11 20:03 datei1&lt;br /&gt;
-rw-r--r-- 1 user1 users 0 Feb 11 20:03 datei2&lt;br /&gt;
ls: Öffnen von Verzeichnis /root nicht möglich: Keine Berechtigung&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Kanäle können auch kürzer über ihre Nummern angesprochen werden.&lt;br /&gt;
Die Standardkanäle können auch umgeleitet werden, indem hinter dem jeweiligen Kommando die Umlenkzeichen &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt; (Kanal 0), &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt; (Kanal 1) und &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt; (Verkettung von Ein- und Ausgabe) verwendet werden.&lt;br /&gt;
In obigem Beispiel wurde die Fehlermeldung zusammen mit der Standardausgabe auf dem Bildschirm ausgegeben. Will man Fehler- und Standardausgabe trennen und in verschiedenen Dateien speichern, kann man das mittels der Kanalnummern tun:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
user@blablubb:~/test$ ls -l /root ~/test &amp;gt;ls.txt 2&amp;gt;ls_err.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nachfolgend wird die Standardausgabe von &amp;lt;code&amp;gt;ls *.txt&amp;lt;/code&amp;gt; in die Datei &amp;lt;code&amp;gt;verzeichnis.info&amp;lt;/code&amp;gt; umgeleitet und danach von &amp;lt;code&amp;gt;less&amp;lt;/code&amp;gt; als Standardeingabe eingelesen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
user@blablubb:~/test$ ls *.txt &amp;gt; verzeichnis.info&lt;br /&gt;
user@blablubb:~/test$ less &amp;lt; verzeichnis.info&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit der [[Pipe (Informatik)|Pipe]] (|) lassen sich Kommandos verketten, indem die Ausgabe des ersten mit der Eingabe des zweiten Kommandos verbunden wird, was sich (fast) beliebig verlängern lässt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
user@blablubb:~/test$ ls -l /etc | grep &amp;#039;^d&amp;#039; | wc -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Mechanismus der Umlenkung der Standardkanäle und die Pipe sind keine Besonderheit der Bash.&lt;br /&gt;
&lt;br /&gt;
=== set-Optionen ===&lt;br /&gt;
Die Bash verfügt über 27 Optionen, mit denen ein anderer Betriebsmodus eingestellt werden kann. Alle möglichen Einstellungen können mit&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
user$ set -o&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
aufgelistet werden, wobei mit der Option &amp;lt;code&amp;gt;-o&amp;lt;/code&amp;gt; die Modi gelistet werden bzw. gesetzt werden und mit der Option &amp;lt;code&amp;gt;+o&amp;lt;/code&amp;gt; die Option wieder aufgehoben wird. Das &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; ist dabei als durchgestrichenes &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; zu lesen. Gebräuchlich sind die Optionen &amp;lt;code&amp;gt;noclobber&amp;lt;/code&amp;gt;, mit der der Ausgabeumleitung untersagt wird, vorhandene Dateien zu [[Überschreiben (Programmierung)|überschreiben]], die Option &amp;lt;code&amp;gt;noglob&amp;lt;/code&amp;gt;, bei der für Dateinamen keine [[Wildcard (Informatik)|Platzhalter]] wie &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; möglich sind und die Option &amp;lt;code&amp;gt;xtrace&amp;lt;/code&amp;gt;, bei der jedes Shell-Kommando vor der Ausführung nochmals ausgegeben wird, und zwar mit den intern vorgenommenen Erweiterungen, was bei der [[Debugger|Fehlersuche]] nützlich sein kann.&lt;br /&gt;
&lt;br /&gt;
Das Überschreiben der Ausgabeumleitung wird unterdrückt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
user$ echo &amp;quot;hallo&amp;quot; &amp;gt; hallo.txt&lt;br /&gt;
user$ echo &amp;quot;hallo&amp;quot; &amp;gt; hallo.txt&lt;br /&gt;
user$ set -o noclobber&lt;br /&gt;
user$ echo &amp;quot;hallo&amp;quot; &amp;gt; hallo.txt&lt;br /&gt;
-su: hallo.txt: Kann existierende Datei nicht überschreiben.&lt;br /&gt;
user$ set +o noclobber&lt;br /&gt;
user$ echo &amp;quot;hallo&amp;quot; &amp;gt; hallo.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Man kann Dateinamen mit Stern und Fragezeichen erzeugen. Vor der Abfrage mit &amp;lt;code&amp;gt;ls *sh&amp;lt;/code&amp;gt; muss die Option wieder zurückgesetzt werden, denn sonst würde nach der Datei &amp;lt;code&amp;gt;*sh&amp;lt;/code&amp;gt; gesucht werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
user$ set -o noglob&lt;br /&gt;
user$ touch da*tei.sh&lt;br /&gt;
user$ touch dat?ei.sh&lt;br /&gt;
user$ set +o noglob&lt;br /&gt;
user$ ls *sh&lt;br /&gt;
da*tei.sh dat?ei.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die dritte Zeile zeigt die von der Bash vorgenommenen Erweiterungen an:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
user$ set -o xtrace&lt;br /&gt;
user$ ls *.txt&lt;br /&gt;
+ ls --color=auto hallo.txt test.txt text.txt&lt;br /&gt;
hallo.txt test.txt text.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Alle Optionen können auch mittels einer Kurzschreibweise gesetzt werden, beispielsweise ist &amp;lt;code&amp;gt;set -C&amp;lt;/code&amp;gt; gleichbedeutend mit &amp;lt;code&amp;gt;set -o noclobber&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Umgebungsvariablen ===&lt;br /&gt;
In der Bash können [[Umgebungsvariable|Variablen]] auf mehrere Arten definiert werden. Grundsätzlich unterscheidet man zwischen „lokalen“ Variablen, die nur in der Shell gelten, in der sie definiert wurden, und „globalen“ Variablen, die auch in Sub-[[Prozess (Informatik)|Prozessen]] zugewiesen sind. Lokale Variablen können erzeugt werden mit:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
user$ var=var1&lt;br /&gt;
user$ var=&amp;#039;var zwei&amp;#039;&lt;br /&gt;
user$ let var=var3&lt;br /&gt;
user$ declare var=var4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
und globale Variablen werden definiert mit:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
user$ declare -x var=var5&lt;br /&gt;
user$ export var=var6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Angesprochen werden die Variablen mit dem &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;-Zeichen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
user$ echo $var&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Statt „globale Variable“ ist allerdings im Unix-Umfeld der Ausdruck „[[Umgebungsvariable]]“ sehr viel geläufiger und passender, weil in manchen Programmiersprachen der Ausdruck „[[globale Variable]]“ eine andere Bedeutung als „Umgebungsvariable“ hat. Eine Wertzuweisung für eine „Umgebungsvariable“ wirkt nur auf „Unterprogramme“ (Kindprozesse), während manche Programmiersprachen es erlauben, Variablenwerte auch für „Oberprogramme“ zu setzen (etwa durch Voranstellen von &amp;lt;code&amp;gt;\global&amp;lt;/code&amp;gt; in [[TeX]]).&lt;br /&gt;
&lt;br /&gt;
=== Eigene Umgebungsvariablen ===&lt;br /&gt;
Die Bash verfügt über zahlreiche eigene Umgebungsvariablen, die auch häufig von anderen Kommandos ausgewertet werden. Bekannt sind die Variablen &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; für den [[Suchpfad]], &amp;lt;code&amp;gt;LANG&amp;lt;/code&amp;gt; für die Einstellung der Sprache oder &amp;lt;code&amp;gt;PS1&amp;lt;/code&amp;gt; für den Prompt.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise können die englischsprachigen Hilfeseiten des Programms &amp;lt;code&amp;gt;ls&amp;lt;/code&amp;gt; mit dem nachfolgenden Befehl aufgerufen werden. Hier wird eine Sub-Shell erzeugt, darin die &amp;lt;code&amp;gt;LANG&amp;lt;/code&amp;gt;-Umgebungsvariable überschrieben und anschließend der Befehl &amp;lt;code&amp;gt;man ls&amp;lt;/code&amp;gt; ausgeführt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
user$ LANG=en man ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Bash-Programmierung unterscheidet sich in vielen Punkten von anderen [[Programmiersprache]]n. So wird beispielsweise bei der Verzweigung traditionell die Bedingung nicht von der Shell selbst ausgewertet, sondern an ein weiteres Programm übergeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ Bedingung ] ; then&lt;br /&gt;
  # Falls Bedingung wahr ist, wird dies ausgeführt&lt;br /&gt;
else&lt;br /&gt;
  # Falls Bedingung falsch ist, wird dies ausgeführt&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die beiden eckigen Klammern sind keine Begrenzer, sondern ein Synonym für den integrierten (builtin) Shell-Befehl &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;. Der Befehl &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; prüft die Bedingung und liefert einen Rückgabewert 0 (&amp;#039;&amp;#039;wahr&amp;#039;&amp;#039;) oder 1 (&amp;#039;&amp;#039;falsch&amp;#039;&amp;#039;), der von der &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;-Anweisung verarbeitet wird. Der oben angeführte Code ist also identisch mit der folgenden Schreibweise:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if test Bedingung ; then&lt;br /&gt;
  # Falls Bedingung wahr ist, wird dies ausgeführt&lt;br /&gt;
else&lt;br /&gt;
  # Falls Bedingung falsch ist, wird dies ausgeführt&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Heutzutage existiert jedoch auch ein eingebauter Ausdruck, der ohne externen Befehl auskommt, daher nicht mehr den Beschränkungen unterliegt, denen die Befehlsform unterlag, und so unter anderem auch keine Anführungszeichen um Variablen mehr benötigt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [[ Bedingung ]] ; then&lt;br /&gt;
  # Falls Bedingung wahr ist, wird dies ausgeführt&lt;br /&gt;
else&lt;br /&gt;
  # Falls Bedingung falsch ist, wird dies ausgeführt&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier kann die Bedingung nun z.&amp;amp;nbsp;B. auch Operatoren wie &amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;gt;&amp;lt;/code&amp;gt; (kleiner als und größer als), und &amp;lt;code&amp;gt;=~&amp;lt;/code&amp;gt; (Vergleich mit [[Regulärer Ausdruck|Regulärem Ausdruck]]) enthalten.&lt;br /&gt;
&lt;br /&gt;
Diese Variante wird daher, wenn keine Kompatibilität zu älteren Versionen benötigt wird, generell empfohlen.&lt;br /&gt;
&lt;br /&gt;
Jedoch kann auch weiterhin der Rückgabewert (0–127, wobei &amp;amp;gt;0 = &amp;#039;&amp;#039;falsch&amp;#039;&amp;#039;) eines beliebigen Programmes verarbeitet werden. Nicht nur der des &amp;#039;&amp;#039;&amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;-Befehls. Als Beispiel wird hier der &amp;lt;code&amp;gt;[[Kill (Unix)|kill]]&amp;lt;/code&amp;gt;-Befehl verwendet, um zu testen, ob ein Prozess mit einer bestimmten Nummer noch läuft bzw. in der Lage ist, Signale entgegenzunehmen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if kill -0 1234 ; then&lt;br /&gt;
  # Prozess 1234 läuft&lt;br /&gt;
else&lt;br /&gt;
  # Prozess 1234 läuft nicht&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;!-- aus &amp;quot;man 2 kill&amp;quot;: „If  sig  is  0, then no signal is sent, but error checking is still per       formed; this can be used to check for the existence of a process  ID  or process group ID.&lt;br /&gt;
Ohne Kenntnis dieser Info ist das Beispiel nicht verstänlich und damit für Neulinge ungeeignet --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sicherheit ==&lt;br /&gt;
{{Hauptartikel|Shellshock (Sicherheitslücke)}}&lt;br /&gt;
Im September 2014 wurde eine gravierende [[Sicherheitslücke]] unter dem Namen &amp;#039;&amp;#039;[[Shellshock (Sicherheitslücke)|Shellshock]]&amp;#039;&amp;#039; bekannt. Die seit langem bestehende Lücke ermöglicht, dass beim Start einer neuen Shell [[Schadcode]], der per [[Umgebungsvariable]] eingefügt wurde, ungeprüft ausgeführt wird.&amp;lt;ref&amp;gt;[https://www.heise.de/newsticker/meldung/ShellShock-Standard-Unix-Shell-Bash-erlaubt-das-Ausfuehren-von-Schadcode-2403305.html ShellShock: Standard-Unix-Shell Bash erlaubt das Ausführen von Schadcode], heise online&amp;lt;/ref&amp;gt; Die Lücke gilt seit Oktober 2014 als geschlossen.&amp;lt;ref name=&amp;quot;lcamtuf-oct-1&amp;quot;&amp;gt;{{Internetquelle |url=http://lcamtuf.blogspot.com/2014/10/bash-bug-how-we-finally-cracked.html |titel=Bash bug: the other two RCEs, or how we chipped away at the original fix (CVE-2014-6277 and &amp;#039;78) |sprache=en |werk=lcamtuf blog |autor=Michał Zalewski |datum=2014-10-01 |abruf=2014-10-31}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;redhat-1200223&amp;quot;&amp;gt;{{Internetquelle |url=https://access.redhat.com/articles/1200223 |titel=Bash Code Injection Vulnerability via Specially Crafted Environment Variables (CVE-2014-6271, CVE-2014-7169) |hrsg=[[Red Hat]] |sprache=en |datum=2014-10-02 |abruf=2014-11-01}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Christian Meißner: &amp;#039;&amp;#039;Bash – Arbeiten und programmieren mit der Shell&amp;#039;&amp;#039;. Open Source Press, 2011, ISBN 978-3-941841-44-4.&lt;br /&gt;
* {{Literatur&lt;br /&gt;
   |Autor=Karsten Günther&lt;br /&gt;
   |Titel=Bash - kurz &amp;amp; gut&lt;br /&gt;
   |Datum=2008&lt;br /&gt;
   |ISBN=978-3-89721-533-7}}&lt;br /&gt;
* Cameron Newham, Bill Rosenblatt: &amp;#039;&amp;#039;Learning the Bash Shell.&amp;#039;&amp;#039; 3. Aufl., O’Reilly &amp;amp; Associates, 2009, ISBN 0-596-00965-8.&lt;br /&gt;
* Jürgen Wolf, Stefan Kania, Frank Sommer: &amp;#039;&amp;#039;Shell-Programmierung. Das umfassende Handbuch&amp;#039;&amp;#039;. Rheinwerk Computing, 7. Aufl. 2022, ISBN 978-3-8362-8923-8.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
{{Wikibooks|Linux-Praxisbuch/ Shellprogrammierung}}&lt;br /&gt;
* [https://tiswww.case.edu/php/chet/bash/bashtop.html Homepage]&lt;br /&gt;
* [https://www.gnu.org/software/bash/bash.html Bash auf der GNU-Seite]&lt;br /&gt;
* [http://tldp.org/LDP/abs/html/index.html Advanced Bash-Scripting Guide] (englisch)&lt;br /&gt;
* [https://ohmybash.github.io Oh My Bash] (Konfigurations-Framework)&lt;br /&gt;
* [https://learnxinyminutes.com/de/bash/ Lerne Bash in Y Minuten] Übersicht der wichtigsten Elemente und Strukturen&lt;br /&gt;
* [https://wiki.ubuntuusers.de/Shell/Bash-Skripting-Guide_f%C3%BCr_Anf%C3%A4nger/ Bash-Skripting-Guide für Anfänger] Einführung bei ubuntuusers.de&lt;br /&gt;
* [https://openbook.rheinwerk-verlag.de/shell_programmierung/ Shell-Programmierung - Einführung, Praxis, Referenz] Ausführliches Lern- und Nachschlagwerk, Rheinwerk openbook 2005&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Shell]]&lt;br /&gt;
[[Kategorie:Unix-Software]]&lt;br /&gt;
[[Kategorie:Freie Systemsoftware]]&lt;br /&gt;
[[Kategorie:Linux-Software]]&lt;br /&gt;
[[Kategorie:Skriptsprache]]&lt;br /&gt;
[[Kategorie:GNU-Paket]]&lt;br /&gt;
[[Kategorie:MacOS-Betriebssystemkomponente]]&lt;br /&gt;
[[Kategorie:POSIX]]&lt;/div&gt;</summary>
		<author><name>77.117.32.244</name></author>
	</entry>
</feed>