GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist Shebang in Linux Shell Scripting?

Sie werden oft auf Shell-Skripte stoßen, die mit:

beginnen
#!/bin/bash

Diese #! wird Shebang oder Hashbang genannt. Der Shebang spielt eine wichtige Rolle beim Shell-Skripting, insbesondere beim Umgang mit verschiedenen Shell-Typen.

In diesem Tutorial lernen Sie:

  • Was ist Shebang?
  • Inwiefern spielt es eine wichtige Rolle beim Shell-Scripting?

Was ist Shebang in Shell-Scripting?

Der Shebang ist die Kombination aus # (Raute-Taste) und ! (Ausrufezeichen). Diese Zeichenkombination hat eine besondere Bedeutung, wenn sie in der allerersten Zeile des Skripts verwendet wird. Es wird verwendet, um den Interpreter anzugeben, mit dem das angegebene Skript standardmäßig ausgeführt wird.

Also, wenn die erste Zeile eines Skripts ist:

#!/bin/bash

Dies bedeutet, dass der Interpreter eine Bash-Shell sein sollte. Wenn die erste Zeile lautet:

#!/bin/zsh

Das bedeutet, dass der zu verwendende Interpreter die Z-Shell ist.

Das #! ist sicherlich etwas Besonderes, weil # für Kommentare in Shell-Skripten verwendet wird, aber hier hat es eine besondere Bedeutung.

Warum der Shebang beim Shell-Scripting wichtig ist?

Hier ist das Ding. Der Shebang, gefolgt von der ausführbaren Datei der Shell, ist für ein Skript nicht obligatorisch.

Wenn Sie ein einfaches Skript wie dieses schreiben:

echo "Namaste, folks!"

Und geben Sie ihm die Ausführungsberechtigung und führen Sie es mit der . Operator, es wird von Ihrer Login-Shell ausgeführt.

[email protected]:~$ cat sample 
echo "Namaste, folks!"
[email protected]:~$ chmod u+x sample 
[email protected]:~$ ./sample 
Namaste, folks!

Warum enthalten Shell-Skripte dann die Zeile #!/bin/bash am Anfang des Skripts?

Denn für Linux- und UNIX-Systeme stehen mehrere Shells zur Verfügung. Während diese Shells größtenteils eine gemeinsame Syntax haben, haben sie eine andere Syntax oder eine andere Art, Dinge zu handhaben.

Aus diesem Grund ist es wichtig, den richtigen Shell-Interpreter im Skript anzugeben, da sonst einige Skripte möglicherweise unterschiedliche Ergebnisse liefern, wenn sie in verschiedenen Shells ausgeführt werden.

Lassen Sie mich Ihnen das an einem einfachen Beispiel zeigen.

Wichtigkeit der Angabe des Shell-Interpreters mit shebang

Ich habe ein Beispiel-Shell-Skript mit einer Reihe von Distributionen geschrieben. Das Skript zeigt dann die Distribution bei Index 2 an.

distros=("Ubuntu" "Fedora" "SUSE" "Debian")
echo "Distro at index 2 is: ${distros[2]}"

Ich habe die Shebang-Zeile nicht hinzugefügt, um einen Shell-Interpreter anzugeben. Das bedeutet, wenn ich dieses Skript ausführe, wird es von der Standard-Shell (in meinem Fall bash) ausgeführt:

[email protected]:~$ echo $0
bash

Können Sie die Ausgabe des Skripts erraten?

[email protected]:~$ ./arrays.sh 
Distro at index 2 is: SUSE

Es zeigt SUSE bei Index 2, da der Array-Index in Bash und vielen anderen Programmier- und Skriptsprachen bei 0 beginnt. ABER das ist in der Z-Shell nicht der Fall. In der Z-Shell beginnt der Array-Index bei 1.

Ich habe die Z-Shell auf meinem System installiert. Ich ändere das Skript und füge die Shebang-Zeile hinzu, um anzugeben, dass das Skript standardmäßig von der Z-Shell ausgeführt werden soll.

#!/bin/zsh

distros=("Ubuntu" "Fedora" "SUSE" "Debian")
echo "Distro at index 2 is: ${distros[2]}"

Können Sie die Ausgabe erraten, wenn ich das Skript jetzt ausführe?

[email protected]:~$ ./arrays.sh 
Distro at index 2 is: Fedora

Merkst du jetzt den Unterschied? Es ist das gleiche Skript, aber das Hinzufügen der Shebang-Zeile machte den Unterschied.

Aus diesem Grund ist es wichtig, den richtigen Shell-Interpreter mit dem Shebang-Operator anzugeben. Als Systemadministrator schreiben Sie möglicherweise Shell-Skripte, die eine bestimmte Shell berücksichtigen, sei es bash, ksh oder zsh. Sie können jedoch nicht sicher sein, dass das System, auf dem das Skript ausgeführt wird, dieselbe Standard-Shell wie Ihres hat. Jetzt ergeben die Dinge einen Sinn, oder?

Shebang wird ignoriert, wenn du Shell explizit angibst

Warum betone ich die "Standard"-Shell? Weil der Shebang den Interpreter angibt, mit dem das Skript ausgeführt werden soll.

Sie können die Shell jedoch explizit angeben, und in solchen Fällen wird die Shebang-Zeile ignoriert.

Wie genau funktioniert der Shebang?

Wenn Sie den Shebang in der ersten Zeile eines Skripts verwenden, sagen Sie der Shell, dass sie das angegebene Skript mit dem angegebenen Befehl ausführen soll.

Grundsätzlich #!/bin/zsh entspricht:

/bin/zsh script_name

Ich habe Ihnen gesagt, wenn die erste Zeile eines Skripts mit shebang beginnt, bedeutet dies, dass Sie den Shell-Interpreter angeben.

Das stimmt nur teilweise. Eigentlich ist das der Zweck des Shebang-Charakters. Aber es ist nicht notwendig, dass die Shebang-Zeile eine ausführbare Shell haben muss. Es kann alles sein.

Zum Beispiel werde ich #!/bin/zsh ersetzen mit #!/bin/cat . /bin/cat ist die ausführbare Datei des cat-Befehls.

#!/bin/cat

distros=("Ubuntu" "Fedora" "SUSE" "Debian")
echo "Distro at index 2 is: ${distros[2]}"

Das bedeutet, dass dieses Skript jetzt mit cat ausgeführt wird Befehl und den Inhalt des Skripts anzeigen.

Es funktioniert, solange es auf einen ausführbaren Befehl zeigt. Wenn Sie zufällige Dinge einfügen, wird ein Fehler ausgegeben.

Ich ändere die Shebang-Zeile zu:

#!/home/abhishek

Es zeigt eindeutig nicht auf die ausführbare Datei eines Befehls und wirft daher einen schlechten Interpreterfehler aus.

[email protected]:~$ cat arrays.sh 
#!/home/abhishek

distros=("Ubuntu" "Fedora" "SUSE" "Debian")
echo "Distro at index 2 is: ${distros[2]}"
[email protected]:~$ ./arrays.sh 
bash: ./arrays.sh: /home/abhishek: bad interpreter: Permission denied

Schlussfolgerung

Lassen Sie mich noch ein paar Fragen beantworten, bevor Sie diesen Artikel beenden:

  • Es ist wichtig, dass zwischen # kein Leerzeichen steht und ! . Sie können es NICHT so verwenden:# !/bin/bash .
  • Die meisten Systeme erlauben Leerzeichen zwischen #! und /bin/bash Es empfiehlt sich jedoch, Leerzeichen zwischen #! zu vermeiden und /bin/bash .
  • #! muss in der ersten Zeile stehen, sonst wird die Shebang-Zeile als Kommentar behandelt. Sie dürfen nicht einmal eine Leerzeile davor haben.

Ich hoffe, Sie verstehen besser, warum #! wird am Anfang von Shell-Skripten in Linux verwendet. Fühlen Sie sich frei, einen Kommentar zu hinterlassen, wenn Sie Fragen oder Vorschläge haben.


Linux
  1. Was bedeutet „:-“ in einem Shell-Skript?

  2. Wie parse ich Json mit Shell-Scripting in Linux?

  3. 4 Möglichkeiten zum Ausführen eines Shell-Skripts unter UNIX / Linux

  4. Was ist usage() im Shell-Scripting?

  5. Was macht % in Linux-Shell-Strings?

Was ist die Shell unter Linux?

So speichern Sie einen Linux-Befehl als Variable im Shell-Skript

So führen Sie Shell-Skript als SystemD-Dienst in Linux aus

Ausführungszeit des Shell-Skripts in Linux drucken

Was ist Subshell in Linux?

Was ist die Login-Shell in Linux?