Ich habe einige Shell-Skript-Tutorials durchgesehen und das folgende Beispielprogramm gefunden:
#!/bin/sh
clear
echo "HELLO WORLD"
Kann mir bitte jemand sagen, welche Bedeutung der Kommentar #!/bin/sh
zu Beginn hat?
Ich habe einige Shell-Skript-Tutorials durchgesehen und das folgende Beispielprogramm gefunden:
#!/bin/sh
clear
echo "HELLO WORLD"
Kann mir bitte jemand sagen, welche Bedeutung der Kommentar #!/bin/sh
zu Beginn hat?
Antworten:
Es heißt Shebang und teilt der übergeordneten Shell mit, welcher Interpreter zum Ausführen des Skripts verwendet werden soll.
z.B
#!/usr/bin/perl <--perl script'
#!/usr/bin/php <-- php script
#!/bin/false <--- do-nothing script, because false returns immediately anyways.
Es wird als Kommentar implementiert, sodass alles, was in diese Zeile kommt, für den angegebenen Interpreter nicht "relevant" ist. Beispielsweise neigen alle Skriptsprachen dazu zu verstehen, dass eine Zeile, die mit beginnt, #
ein Kommentar ist, und ignorieren den !/usr/bin/whatever
Teil, der andernfalls ein Syntaxfehler in dieser bestimmten Sprache sein könnte.
exec()
Systemaufruf für die Datei auf.
Wenn Sie versuchen, ein Programm unter Unix auszuführen (eines mit gesetztem ausführbaren Bit), überprüft das Betriebssystem die ersten Bytes der Datei. Diese bilden die sogenannte "magische Zahl", anhand derer das Format des Programms und seine Ausführung festgelegt werden können.
#!
entspricht der magischen Zahl 0x2321 (in einer ASCII-Tabelle nachschlagen). Wenn das System die magische Zahl erkennt, weiß es, dass es sich um ein Textskript handelt, und liest bis zum nächsten \n
(es gibt eine Grenze, aber es entgeht mir atm). Nachdem der Interpreter identifiziert wurde (das erste Argument nach dem Schebang), wird der Interpreter aufgerufen.
Andere Dateien haben ebenfalls magische Zahlen. Wenn Sie eine Bitmap-Datei (.BMP) über anzeigen less
, werden die ersten beiden Zeichen angezeigt BM
. Diese magische Zahl zeigt an, dass die Datei tatsächlich eine Bitmap ist.
Wenn die Datei, in der sich dieses Skript befindet, ausführbar ist, #!
teilt hash-bang ( ) dem Betriebssystem mit, welcher Interpreter zum Ausführen des Skripts verwendet werden soll. In diesem Fall ist es /bin/sh
zum Beispiel.
Es gibt einen Wikipedia-Artikel darüber für weitere Informationen.
Die erste Zeile teilt der Shell mit, dass sie das Programm (in diesem Fall / bin / sh) zur Interpretation verwenden sollte, wenn Sie das Skript direkt ausführen (./run.sh; im Gegensatz zu / bin / sh run.sh).
Sie können es auch verwenden, um Argumente zu übergeben, üblicherweise -e (bei Fehler beenden) oder andere Programme (/ bin / awk, / usr / bin / perl usw.) zu verwenden.
#!/bin/sh
oder #!/bin/bash
muss die erste Zeile des Skripts sein, denn wenn Sie es nicht in der ersten Zeile verwenden, behandelt das System alle Befehle in diesem Skript als unterschiedliche Befehle. Wenn die erste Zeile steht #!/bin/sh
, werden alle Befehle als ein einziges Skript betrachtet und es wird angezeigt, dass diese Datei im ps
Befehl ausgeführt wird und nicht die Befehle in der Datei.
./echo.sh
ps -ef |grep echo
trainee 3036 2717 0 16:24 pts/0 00:00:00 /bin/sh ./echo.sh
root 3042 2912 0 16:24 pts/1 00:00:00 grep --color=auto echo
ps
, und Code-Auszüge wie #!/bin/sh
sollten formatiert werden.