Die Frage, wie die Auswahl eines konkreten Programms stattfindet, ist
ebenso trivial wie bodenlos tiefgründig. Die Antwort ist ein
Metaprogramm, das automatisch geladen wird und dessen Hauptaufgabe
es ist, weitere Programme zu laden. Unter UNIX und seinen Verwandten
wird so ein Programm als Shell bezeichnet. Sie hat, im Gegensatz zu
vielen vergleichbaren Programmen anderer Betriebssysteme, den Status
eines Benutzerprogramms und kann deshalb nach Belieben ausgetauscht
werden.
An der Benutzeroberfläche entfesselt sich leicht eine Art Glaubenskrieg zwischen den Protagonisten unterschiedlicher Modelle. Zwischen den grafischen (mausgesteuerten, bildschirmorientierten) und den textuellen (tastaturgesteuerten, zeilenorientierten) Benutzeroberflächen scheinen sich die Geister zu scheiden. Die Vorteile der grafischen Benutzerführung liegt vor allem in ihrer leichten Erlernbarkeit. Durch die Präsentation der möglichen Aktionen in Menüs kann der ungeübte Benutzer intuitiv den Weg zu seiner Problemlösung finden. Zeilenorientierte Oberflächen, sogenannte Kommandozeileninterpreter, haben ihren Vorteil in der Vielseitigkeit. Während in einem Menüsystem zwangsläufig nur die Funktionen zu erreichen sind, für die es Menüeinträge gibt, können im Kommandozeileninterpreter alle Kommandos mit allen zulässigen Optionen aufgerufen werden.
Genau diese Vielseitigkeit macht den Kommandozeileninterpreter -- die Shell -- zu einem unverzichtbaren Werkzeug der Systemverwalterin, das auch in kommerziellen Systemen mit menügesteuerter Administratorshell nicht ersetzt werden kann.
Die ``Standardshell'' von AT&T Unix ist die nach ihrem Entwickler Steven R. Bourne benannte Shell (die unter der Kommandobezeichnung sh aufgerufen wird). Neben ihren Diensten als interaktiver Kommandozeileninterpreter bietet die Bourne-Shell noch eine mächtige Sprache zum Erstellen von Shellprogrammen. Solche Shellscripts erlauben schnell und unkompliziert die Zusammenfassung immer wiederkehrender Kommandofolgen als Batchdatei. Die Möglichkeiten der Shellprogrammierung gehen aber noch viel weiter, wie die weiter hinten folgende Beschreibung zeigen wird.
Neben der ``alten'' Bourne-Shell gibt es noch eine ganze Reihe weiterer Shells. Andere bekannte Shells sind die an der Berkeley Universität entwickelte csh und die nach ihrem Entwickler David Korn benannte Shell ksh. Die Shells unterscheiden sich vor allem in den Shellsprachen, sie haben aber auch neue Eigenschaften zur Erleichterung der interaktiven Benutzung als Kommandozeileninterpreter. Die ``Bourne Again Shell'' bash vereint die altbekannte und bewährte Shellsprache der Bourne Shell mit den fortschrittlichen und beliebten Interaktionsfunktionen der anderen Shells. Die bash ist als Standardshell in allen Linux-Distributionen enthalten.
Es ist erklärter Anspruch der bash, zur Standard-Bourne-Shell kompatibel zu sein, und Ziel ist die volle Übereinstimmung mit dem POSIX-1003.2-Standard. Die Kompatibilität zur Bourne-Shell ist besonders wichtig, um die vielen Shellscripts für diese Standardshell auch mit der bash benutzen zu können. Bei der bash-1.12 gibt es einen Fehler in der case-Anweisung, die zur Inkompatibilität führt. Dieser Fehler ist in Version 1.13 behoben.