Ist Bash-Scripting dasselbe wie Shell-Scripting?

58

Ich bin sehr neu in Ubuntu. Ich höre Leute sagen "Shell Scripting", "Bash Scripting".

Ich frage mich, sind sie gleich? Oder sind sie anders?

Batman
quelle
Es gibt eine nützliche Antwort bei SO
Mr. Pei

Antworten:

55

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.

Hilton Shumway
quelle
1
Was definiert dash als Standard-Scripting-Shell?
wjandrea
1
@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 .


quelle
2
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.

fromnaboo
quelle
2
$ 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:

Arielf
quelle
2

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.

Speziell unter Debian / Ubuntu gibt bin/shes einen Symlink, bin/dashder 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

Allgemeine Regel wäre:

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:

https://www.shellcheck.net/

http://mywiki.wooledge.org/Bashism

Ola
quelle
1
Ziemlich gute Antwort, +1. Willkommen bei AskUbuntu!
Sergiy Kolodyazhnyy
1
Bezüglich Dash als / bin / sh auf Ubuntu gibt es einen Artikel, den Sie vielleicht auch zitieren möchten. Und es gibt auch askubuntu.com/q/976485/295286
Sergiy Kolodyazhnyy