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.
@wjandrea Die Tatsache, dass /bin/shsymlink to /bin/dashdie 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/shSie 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/shPOSIX-kompatible Shell der Bourne-Familie verfügen .
Sergiy Kolodyazhnyy
29
Einführung
Shell-Scripting und BashScripting sind nicht dasselbe, da es andere Shells gibt sh, mit denen ein Script ausgeführt werden kann. Ein Skript, das ausgeführt werden Bashsoll, sollte als BashSkript gekennzeichnet sein. Die Begriffe werden häufig synonym verwendet, da sie aufgrund Bashihrer erweiterten Funktionalität shin 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 shund bashsind 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
Shwar die ursprüngliche Unix-Shell, die von Stephen Bourne entwickelt wurde; Debian-basierte Systeme und Ubuntu betrachten sie jedoch dashals ihre shShell ( shmit der sie tatsächlich verbunden sind dash). In Debian und Ubuntu wird es aufgrund der Geschwindigkeit shhäufiger für kritische Systemprozeduren und zum Ausführen von Schlüsselskripten beim Start verwendet. Weitere Informationen finden Sie im Ubuntu-Wiki . Bashsteht 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 Bashwar 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 shund Bash, wie sie in Ubuntu und anderen Distributionen verwendet werden, POSIXkompatibel 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 POSIXParameter 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 bashSkripte ausgeführt werden sollen , und stehen #!/bin/bashoben im Skript. Es ist eigentlich egal, ob das Skript script.sh oder my.script heißt , wichtig ist, ob der Aufruf des Interpreters /bin/shoder ist /bin/bash. Shell-Skripte können auch in der Befehlszeile mit shoder aufgerufen werden bash.
Es ist jedoch wichtig zu beachten, dass die Ergebnisse je nach dem aufgerufenen Interpreter unterschiedlich sein können, da nicht alle bashBefehle ausgeführt werden sh, wohingegen die meisten shBefehle ausgeführt werden bash. Im Allgemeinen möchten die meisten Benutzer /bin/bashfür ihre Skripte verwenden, um die erweiterten Funktionen nutzen zu können. System-Skripte können bei Bedarf mit ausgeführt /bin/shwerden.
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 , Bashund wird von O'Reilly veröffentlicht. Eine gute Einführung bietet auch der Bash Beginner's Guide .
Diese Antwort ist meiner eigentlich überlegen (die akzeptierte Antwort), meine ist erst eine Woche vor dieser gekommen.
Hilton Shumway
4
Es gibt mehrere Schalen für Ubuntu, wie bash, zsh, ksh, tcshund csh.
Wann immer jemand Shell sagt , spricht er über eines davon. Diese Schalen unterscheiden sich jedoch ein wenig voneinander. Wenn jemand über bashScripting spricht , verwendet er eine Shell, aber wenn jemand über Shell-Scripting spricht, verwendet er nicht per se bash. Aber wie bashes 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 4Mar2911:53/bin/sh -> dash*
$ ls -l /bin/dash-rwxr-xr-x 1 root root 109768Mar2911:53/bin/dash*
$ ls -l /bin/bash-rwxr-xr-x 1 root root 955024Apr308: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.
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/shshebang 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
Shebang- Spezifizierer und einheitliche Pfade für ausführbare Shell-Dateien auf Unix-ähnlichen Betriebssystemen
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.
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.
Wenn ein Befehl oder eine Option von POSIX nicht definiert wird, platzieren Sie sie nicht #! /bin/shan erster Stelle in einem
Skript.
Konvertieren Sie Ihr Skript oder suchen Sie nach Fehlern
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:
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.
quelle
/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 gibtsh
, mit denen ein Script ausgeführt werden kann. Ein Skript, das ausgeführt werdenBash
soll, sollte alsBash
Skript gekennzeichnet sein. Die Begriffe werden häufig synonym verwendet, da sie aufgrundBash
ihrer erweiterten Funktionalitätsh
in vielen Distributionen am häufigsten zum Ausführen von Benutzerskripten verwendet werden. Es gibt jedoch auch andere Schalen wie dieKorn (ksh)
,C shell (csh)
und dasZ shell (zsh)
, aber wir werden nicht in sich hier als eine Diskussion gehensh
undbash
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 jedochdash
als ihresh
Shell (sh
mit der sie tatsächlich verbunden sinddash
). In Debian und Ubuntu wird es aufgrund der Geschwindigkeitsh
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 erweitertsh
. Die Entwicklung von Fox und anderenBash
war ein wichtiger Teil des GNU-Projekts. Weitere Informationen finden Sie in dieser großartigen Diskussion über die Geschichte vonBash
.Es ist wichtig zu beachten, dass beide
sh
undBash
, 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 dieserPOSIX
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 alsbash
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 mitsh
oder aufgerufen werdenbash
.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 werdensh
, wohingegen die meistensh
Befehle ausgeführt werdenbash
. 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 .quelle
Es gibt mehrere Schalen für Ubuntu, wie
bash
,zsh
,ksh
,tcsh
undcsh
.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 sebash
. Aber wiebash
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.quelle
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:
quelle
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
Shebang- Spezifizierer und einheitliche Pfade für ausführbare Shell-Dateien auf Unix-ähnlichen Betriebssystemen
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-bashDebian / 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
Allgemeine Regel wäre:
Konvertieren Sie Ihr Skript oder suchen Sie nach Fehlern
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:
https://www.shellcheck.net/
http://mywiki.wooledge.org/Bashism
quelle