Antworten:
Bash ( bash
) ist eine von vielen verfügbaren (noch am häufigsten verwendeten) Unix-Shells. Bash steht für " B ourne A gain SH ell" und ist ein Ersatz / eine Verbesserung der ursprünglichen Bourne-Shell ( sh
).
Shell-Skripte sind Skripte in jeder Shell, während Bash-Skripte speziell für Bash geschrieben werden. In der Praxis werden "Shell-Skript" und "Bash-Skript" jedoch häufig synonym verwendet, es sei denn, die fragliche Shell ist nicht Bash.
BEARBEITEN: Tatsächlich ist die Standard-Scripting-Shell in Ubuntu Dash, während die Standard-Interactive-Shell (was Sie erhalten, wenn Sie ein Terminal öffnen) Bash ist. Trotzdem sind die beiden Begriffe meistens noch austauschbar.
/bin/sh
symlink to /bin/dash
die Standard- System- Shell erstellt, aber keine Standard- Skript- Shell ist, dh es gibt keine schriftliche Regel, die Sie unbedingt verwenden müssen /bin/sh
. Wenn /bin/sh
Sie es verwenden , geschieht dies hauptsächlich aus Gründen der Portabilität, wenn Sie erwarten, dass Ihr Skript auf mehreren Unix-ähnlichen Betriebssystemplattformen verwendet wird, von denen die meisten über eine /bin/sh
POSIX-kompatible Shell der Bourne-Familie verfügen .
Einführung
Shell-Scripting und Bash
Scripting sind nicht dasselbe, da es andere Shells gibt sh
, mit denen ein Script ausgeführt werden kann. Ein Skript, das ausgeführt werden Bash
soll, sollte als Bash
Skript gekennzeichnet sein. Die Begriffe werden häufig synonym verwendet, da sie aufgrund Bash
ihrer erweiterten Funktionalität sh
in vielen Distributionen am häufigsten zum Ausführen von Benutzerskripten verwendet werden. Es gibt jedoch auch andere Schalen wie die Korn (ksh)
, C shell (csh)
und das Z shell (zsh)
, aber wir werden nicht in sich hier als eine Diskussion gehen sh
und bash
sind vor allem für Ubuntu. Ein großer IBM Artikel hier geht mehr ins Detail über die Entwicklung der Schalen in Linux und beschreibt auch die Shell - Architektur und wie Muscheln unterscheiden.
Shell Scripting
Sh
war die ursprüngliche Unix-Shell, die von Stephen Bourne entwickelt wurde; Debian-basierte Systeme und Ubuntu betrachten sie jedoch dash
als ihre sh
Shell ( sh
mit der sie tatsächlich verbunden sind dash
). In Debian und Ubuntu wird es aufgrund der Geschwindigkeit sh
häufiger für kritische Systemprozeduren und zum Ausführen von Schlüsselskripten beim Start verwendet. Weitere Informationen finden Sie im Ubuntu-Wiki . Bash
steht für die Bourne Again SHell und wurde später von Brian Fox entwickelt und das Original stark erweitert sh
. Die Entwicklung von Fox und anderen Bash
war ein wichtiger Teil des GNU-Projekts. Weitere Informationen finden Sie in dieser großartigen Diskussion über die Geschichte von Bash
.
Es ist wichtig zu beachten, dass beide sh
und Bash
, wie sie in Ubuntu und anderen Distributionen verwendet werden, POSIX
kompatibel sind. Dies bedeutet, dass sie eine Reihe von Standards zur Ausführung von Befehlen in der Shell abonnieren. Dies soll sicherstellen, dass die Ergebnisse der im Betriebssystem verwendeten Skripte zuverlässig vorhergesagt werden können und dass das Verhalten der Shell innerhalb dieser POSIX
Parameter gehalten werden kann, da dies für Entwickler besonders wichtig ist. Weitere Informationen zu den Standards finden Sie in der offiziellen Dokumentation .
Häufig haben Shell-Skripte das Suffix .sh
, obwohl sie als bash
Skripte ausgeführt werden sollen , und stehen #!/bin/bash
oben im Skript. Es ist eigentlich egal, ob das Skript script.sh oder my.script heißt , wichtig ist, ob der Aufruf des Interpreters /bin/sh
oder ist /bin/bash
. Shell-Skripte können auch in der Befehlszeile mit sh
oder aufgerufen werden bash
.
Es ist jedoch wichtig zu beachten, dass die Ergebnisse je nach dem aufgerufenen Interpreter unterschiedlich sein können, da nicht alle bash
Befehle ausgeführt werden sh
, wohingegen die meisten sh
Befehle ausgeführt werden bash
. Im Allgemeinen möchten die meisten Benutzer /bin/bash
für ihre Skripte verwenden, um die erweiterten Funktionen nutzen zu können. System-Skripte können bei Bedarf mit ausgeführt /bin/sh
werden.
Ressourcen für Bash Shell-Skripte
Es ist manchmal schwierig, nützliche Ressourcen online zu finden, die bewährten Verfahren entsprechen und Ratschläge geben, mit denen Sie nützliche Skripts erstellen können. Nach man bash
, sind einige der wichtigsten Ressourcen Gregs Wiki , Bash Hacker und kürzlich erschienenen Buch über Shell Scripting Steve Parker , die in erster Linie darauf konzentriert , Bash
und wird von O'Reilly veröffentlicht. Eine gute Einführung bietet auch der Bash Beginner's Guide .
Es gibt mehrere Schalen für Ubuntu, wie bash
, zsh
, ksh
, tcsh
und csh
.
Wann immer jemand Shell sagt , spricht er über eines davon. Diese Schalen unterscheiden sich jedoch ein wenig voneinander. Wenn jemand über bash
Scripting spricht , verwendet er eine Shell, aber wenn jemand über Shell-Scripting spricht, verwendet er nicht per se bash
. Aber wie bash
es bei Ubuntu-Skripten üblich ist, ist er es normalerweise. Darüber hinaus sind die verschiedenen Schalen in vielen Aspekten gleich, sodass dies normalerweise keine Rolle spielt.
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29 11:53 /bin/sh -> dash*
$ ls -l /bin/dash
-rwxr-xr-x 1 root root 109768 Mar 29 11:53 /bin/dash*
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 955024 Apr 3 08:58 /bin/bash*
Dies zeigt, dass 'sh' ein Symlink zu 'dash' ist und dass / bin / bash, die standardmäßige interaktive Shell unter Ubuntu, eine ausführbare Datei ist, die fast neunmal größer als / bin / sh ist.
Tatsächlich zeigt "man sh" (1590 Zeilen) gegen "man bash" (5459 Zeilen), dass bash eine große Obermenge des traditionellen "sh" ist.
Lesen Sie hier mehr:
Shell-Skript wird als portabilitätsorientiertes Skript definiert , das von einer System-Shell mit POSIX-kompatiblen Betriebssystemen ausgeführt werden kann. Die Syntax wäre identisch oder ähnlich mit der durch den POSIX-Standard definierten Syntax der Shell-Skriptsprache. Dies ist der Standard für die meisten POSIX-kompatiblen Betriebssysteme wie Linux / Unix / * BSD usw. POSIX ist die häufigste Grundlage für die Kompatibilität zwischen Betriebssystemen.
Verschiedene Betriebssysteme aus den oben genannten implementieren unterschiedliche Shells für die nicht interaktive Verwendung (dh zum Ausführen von Systemskripten oder Skripten, die #! /bin/sh
shebang verwenden), die neben der Implementierung von POSIX-Befehlen und -Syntax eigene Erweiterungen haben oder möglicherweise aus weniger nützlichen Funktionen entfernt werden können Aus Performancegründen ermöglicht POSIX Ground jedoch ein hohes Maß an Portabilität von Skripten, die für verschiedene POSIX-kompatible Oss entwickelt wurden.
Die meisten oben genannten Betriebssysteme verfügen über separate interaktive Shell , die in der Regel voll funktions ist bash . Bash ist zu einem großen Teil POSIX-kompatibel, verfügt jedoch auch über einen großen Pool an zusätzlichen Befehlen und unterstützt unterschiedliche Syntax. Wenn Sie Bash mit der Befehlszeilenoption --posix starten oder 'set -o posix' ausführen, während Bash ausgeführt wird, entspricht Bash mehr dem POSIX-Standard, indem Sie das Verhalten an das von POSIX angegebene Verhalten in Bereichen anpassen, in denen der Bash-Standard verwendet wird Unterschiedlich, siehe: https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html
Dank der einheitlichen Regeln für das Platzieren von ausführbaren Dateien für Shells (diese befinden sich normalerweise im Verzeichnis '/ bin /') können wir einheitliche Regeln für das Erstellen von Shellskripten festlegen eine richtige Shell-Programmdatei zum Ausführen des Skripts. Unix / Linux / * BSD-Dateisysteme unterstützen keine Erweiterungen, daher dienen die Dateierweiterungen nur als zusätzlicher Hinweis oder zu Indizierungszwecken.
Speziell unter Debian / Ubuntu gibt bin/sh
es einen Symlink, bin/dash
der auf eine ausführbare Datei einer Dash-Shell verweist . Das macht Dash zur System-Shell, die schätzungsweise 4x schneller ist und eine Größe von ~ 1/10 hat als die funktionalere Bash. Quelle: https://unix.stackexchange.com/questions/148035/is-dash-or-some-other-shell-faster-than-bash
Debian / Ubuntu interaktives Terminal ist standardmäßig wie in vielen anderen Unix-ähnlichen Betriebssystemen, bash, für die der Weg auch einheitlich ist: /bin/bash
.
POSIX.1-2017-Standard: http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap02.html
Wenn ein Befehl oder eine Option von POSIX nicht definiert wird, platzieren Sie sie nicht
#! /bin/sh
an erster Stelle in einem Skript.
Zum Konvertieren Ihres Skripts von Bash nach POSIX möchten Sie möglicherweise automatisch nach Fehlern in Ihrem Shell-Skript suchen oder feststellen, welche Änderungen Sie in Ihrem Bash-Skript vornehmen sollten, um es POSIX-kompatibel zu machen: