Wenn ein Kommando in der bash ausgeführt wurde, gibt es einen 1-Byte-Wert als exit-Status zurück.
Dieser exit-Status kann also Werte von 0...255 annehmen und wird in der shell-Variable $? abgelegt.
Im Allgemeinen besitzt dieser exit-Status bei der fehlerfreien Ausführung eines Kommandos den Wert 0 (Null).
Dieser Wert wird durch die Verzweigungs- und Schleifenbefehle als logisch wahr (true) interpretiert.
Sollte der Aufruf eines Kommandos fehlerhaft sein, oder das Kommando einen Fehler erzeugen oder abgebrochen werden, so ist der exit-Status größer als Null.
Der genaue Wert gibt oft noch genauere Informationen zur Fehlerursache.
Ist der exit-Status größer als Null, so wird das durch die Verzweigungs- und Schleifenbefehle als logisch falsch (false) interpretiert.
Das bedeutet, dass die Entscheidungen in den Verzweigungs- und Schleifenbefehlen selbst wieder eigenständige Kommandos sind und kein Bestandteil des Verzweigungs- und Schleifenbefehls selbst.
Damit erreicht man eine sehr hohe Flexibilität, da die Verzweigungs- und Sprungbedingungen nicht auf wenige, durch den Verzweigungs- oder Schleifenbefehl vordefinierte Operatoren beschränkt bleibt, da so auch eigene Kommandos und Scripte als Bedingung verwendet werden können.
Um Zahlen-, Datei- und Stringtests durchzuführen, gibt es verschiedene interne und externe Kommandos, wie test, [ oder [[ usw.
Diese sind ebenfalls eigenständige Kommandos, die mit Hilfe von Vergleichsoperatoren eine Bedingung testen und je nachdem, ob die Bedingung erfüllt ist oder nicht, einen entsprechenden exit-code erzeugen.
Auch ein selbst geschriebenes Shell-Script liefert einen exit-Status an die aufrufende bash zurück.
Im Allgemeinen entspricht dieser dem exit-Status des letzten ausgeführten Kommandos.
Mit dem Kommando exit [Bytewert] kann man ein Script beenden und einen exit-Status-Wert gezielt übergeben.
In Shellfunktionen erreicht man das selbe mit dem Kommando return.