Unterschied zwischen Sh und Bash
- Was ist eine Shell?
- Wie man die aktuelle Shell findet
- Wie man die verfügbaren Shells findet
-
Der
sh
-Befehl und seine Verwendung -
Bash
und seine Verwendung
Dieses Tutorial erklärt, was eine Shell ist, indem man die aktuell verwendete Shell kennt, die Liste aller verfügbaren Shells überprüft und den Unterschied zwischen sh
und bash
erklärt.
Was ist eine Shell?
Eine Shell ist ein Computerprogramm, das Befehle entgegennimmt. Es interpretiert auch Befehle und übergibt sie zur Verarbeitung an das Betriebssystem. Es fungiert als Schnittstelle zwischen dem Benutzer und dem Betriebssystem, über die der Benutzer mit dem Betriebssystem interagieren kann.
Die meisten Linux-Betriebssysteme enthalten mindestens ein einzelnes Shell-Programm. Das Shell-Programm ist Bash
, Dash
oder beides.
Wie man die aktuelle Shell findet
Um die Shell zu kennen, die derzeit auf einem Linux-System verwendet wird, können wir die Datei /etc/passwd
lesen, da sie Benutzerkontoinformationen speichert. Lassen Sie uns den folgenden Befehl ausführen, um die aktuelle Shell zu kennen.
Der Befehl grep
wird verwendet, um in einer bestimmten Datei nach einer Zeichenkette zu suchen. Der folgende Befehl sucht nach dem Benutzer fumba
in der Datei passwd
, die sich in /etc
befindet. Wenn der Befehl grep
eine Übereinstimmung findet, gibt er die Zeile mit dem Ergebnis aus.
$ grep fumba /etc/passwd
Aus der Ausgabe unten können wir erkennen, dass die Standard-Shell für den Benutzer fumba
bash ist.
fumba:x:1000:1000:,,,:/home/fumba:/bin/bash
Wie man die verfügbaren Shells findet
Alle verfügbaren Shells in Linux-Systemen sind in der Datei /etc/shells
aufgelistet. Wir verwenden den untenstehenden Befehl cat
, um den Inhalt der Datei /etc/shells
anzuzeigen.
cat /etc/shells
Die folgende Ausgabe zeigt die Liste aller verfügbaren Shells auf unserem System.
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen
Der sh
-Befehl und seine Verwendung
sh
ist ein Befehlsname für die Bourne-Shell. Es ist der Standard-Kommandosprachen-Interpreter für Unix-ähnliche Betriebssysteme. Es führt Befehle aus einer BefehlszeilenZeichenkette, der Standardeingabe oder einer angegebenen Datei aus. sh
entspricht den POSIX-Standards.
Portable Operating System Interface (POSIX) ist eine Familie von Standards, die von der IEEE Computer Society spezifiziert wurden, um die Kompatibilität zwischen Betriebssystemen aufrechtzuerhalten. Diese Standards helfen bei der Entwicklung plattformübergreifender Software für mehrere Betriebssysteme, sobald die Standards befolgt werden.
Die meisten Systeme haben die Datei /bin/sh
, aber sie ist ein symbolischer Link und ruft sh
nicht auf. In Ubuntu ist /bin/sh
ein symbolischer Link zur Shell Dash
. Wir können dies überprüfen, indem Sie den folgenden Befehl ausführen.
$ file -h /bin/sh
Die Ausgabe unten zeigt, dass /bin/sh
ein symbolischer Link zu dash
ist.
/bin/sh: symbolic link to dash
Lassen Sie uns #!/bin/sh
zu einem Skript hinzufügen.
#!/bin/sh
printf "sh points to dash!\n"
Das obige Skript gibt als Interpreter /bin/sh
an. Da jedoch /bin/sh
auf dash
zeigt, führt die Shell dash
das Skript als Interpreter aus.
Bash
und seine Verwendung
Bash
steht für Bourne Again Shell. Wie sh
ist es ein Befehlssprachenprozessor und eine Shell. bash ist jedoch eine Obermenge von sh
. Es unterstützt Funktionen von sh
und bietet weitere Erweiterungen und Funktionen. Bash
ist die Standard-Shell für Linux-Betriebssysteme.
Anfangs entsprach Bash
den POSIX-Standards, aber im Laufe der Zeit folgte sie nicht mehr den POSIX-Standards, da weitere Funktionen und Erweiterungen hinzugefügt wurden. Bash kann jedoch weiterhin im POSIX-Modus verwendet werden, indem das Flag -posix
gesetzt wird, wie unten gezeigt.
$ bash --posix
Lassen Sie uns ein Bash-Skript schreiben, das dem POSIX-Standard entspricht.
#!/bin/bash
set -o posix
printf "we are using bash shell!\n"
Der bash
-Interpreter führt das obige Skript aus, da es in der ersten Zeile #!/bin/bash
angegeben wurde.
Der Befehl set
aktiviert Optionen im Skript. In unserem Fall ermöglicht es der Bash-Shell, das Skript im POSIX-Modus auszuführen.