Skript-Aufbau und -Aufruf: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Der Seiteninhalt wurde durch einen anderen Text ersetzt: „*Aufruf eines Skripts“)
Markierung: Ersetzt
Zeile 1: Zeile 1:
−
=Der Interpreter und der Aufruf von Shell-Skripten=
+
*[[Aufruf eines Skripts]]
−
 
 
−
== Der Interpreter in der Windows-Welt ==
 
−
 
 
−
Unter Windows wird eine Datei anhand ihrer Endung einem Programm zugeordnet.
 
−
 
 
−
Das ist auch bei Skripten so – sie werden anhand ihrer Endung an einen bestimmten Interpreter übergeben.
 
−
 
 
−
{| border=1 cellpadding="2"
 
−
|-
 
−
! Endung
 
−
! Interpreter
 
−
|-
 
−
| .pl
 
−
| Perl
 
−
|-
 
−
| .py
 
−
| Python
 
−
|-
 
−
| .bat
 
−
| command.com
 
−
|-
 
−
| .cmd
 
−
| cmd.exe
 
−
|}
 
−
 
 
−
=Der Interpreter und der Aufruf von Shell-Skripten=
 
−
 
 
−
== Der Interpreter in der Windows-Welt ==
 
−
 
 
−
Unter Windows wird eine Datei anhand ihrer Endung einem Programm zugeordnet.
 
−
 
 
−
Das ist auch bei Skripten so – sie werden anhand ihrer Endung an einen bestimmten Interpreter übergeben.
 
−
 
 
−
{| border=1 cellpadding="2"
 
−
|-
 
−
! Endung
 
−
! Interpreter
 
−
|-
 
−
| .pl
 
−
| Perl
 
−
|-
 
−
| .py
 
−
| Python
 
−
|-
 
−
| .bat
 
−
| command.com
 
−
|-
 
−
| .cmd
 
−
| cmd.exe
 
−
|}
 
−
 
 
−
== Der Interpreter in der Linux-Welt ==
 
−
 
 
−
*Unter Unix/Linux entscheidet nicht die Dateiendung, welchem Interpreter ein Skript übergeben wird.
 
−
*Dateiendungen sind optional und dienen in erster Linie der Organisation.
 
−
*Der Dateityp – und damit der Interpreter – wird durch die ersten Bytes des Dateiinhalts bestimmt.
 
−
 
 
−
;Beispiel
 
−
* '''echo "echo Hallo Welt" > skript'''
 
−
* '''file skript'''
 
−
 
 
−
skript: ASCII text
 
−
 
 
−
*Hier sehen wir, dass die Datei als normaler ASCII-Text erkannt wird.*
 
−
*Bei einem Programmaufruf wird sie der aktuellen Shell übergeben (es gibt außer der Bash noch andere Shells, z. B. Bourne-Shell (bsh), Korn-Shell (ksh), ash).*
 
−
 
 
−
* '''chmod +x skript'''
 
−
* '''./skript'''
 
−
 
 
−
Hallo Welt
 
−
 
 
−
*Um sicherzugehen, dass das Skript der richtigen Shell übergeben wird, fügt man an den Skriptanfang eine sogenannte Shebang-Zeile hinzu (''#!'').*
 
−
*In unserem Fall also: ''#!/bin/bash'' für die Bourne-Again Shell.*
 
−
*Dadurch wird das Programm, welches hinter dem ''#!'' (Shebang/Gobang Operator) steht, als Interpreter für das Skript verwendet.*
 
−
 
 
−
#!/bin/bash
 
−
date
 
−
hostname
 
−
pwd
 
−
 
 
−
*Selbst in einer anderen Shell (z. B. der C-Shell) ist somit sichergestellt, dass das Skript von der Bash interpretiert wird.*
 
−
 
 
−
* '''csh'''
 
−
* '''file skript'''
 
−
 
 
−
skript: Bourne-Again shell script text executable
 
−
 
 
−
== Aufrufarten von Bash-Skripten ==
 
−
 
 
−
Ein Bash-Skript kann auf unterschiedliche Weise gestartet werden. 
 
−
Je nach Aufruf unterscheidet sich, ob eine neue Subshell gestartet wird, ob der Name des Skripts bekannt ist und ob Variablen erhalten bleiben.
 
−
 
 
−
=== bash skript (r) ===
 
−
* Starten einer Subshell
 
−
* Lesen der Skriptdatei von der Subshell
 
−
* Kommandos werden nacheinander abgearbeitet
 
−
* Beenden der Subshell und Rückkehr zur aufrufenden Shell 
 
−
''(Die Shell, die das Skript abarbeitet, kennt den Namen des Shellskriptes)''
 
−
 
 
−
=== bash < skript (r) ===
 
−
* Starten einer Subshell
 
−
* Lesen der Skriptdatei von der Subshell über Umleitung
 
−
* Kommandos werden nacheinander abgearbeitet
 
−
* Beenden der Subshell und Rückkehr zur aufrufenden Shell 
 
−
''(Die Shell, die das Skript abarbeitet, kennt den Namen des Shellskriptes nicht)''
 
−
 
 
−
=== ./skript (rx) ===
 
−
* Starten einer Subshell
 
−
* Lesen der Skriptdatei von der Subshell
 
−
* Kommandos werden nacheinander abgearbeitet
 
−
* Beenden der Subshell und Rückkehr zur aufrufenden Shell 
 
−
''(Die Shell, die das Skript abarbeitet, kennt den Namen des Shellskriptes; es muss zusätzlich das Ausführungsrecht gesetzt sein.)''
 
−
 
 
−
=== exec ./skript (rx) ===
 
−
* Die Subshell ersetzt die aktuelle Shell (überlädt die aktuelle Shell)
 
−
* Lesen der Skriptdatei
 
−
* Kommandos werden nacheinander abgearbeitet
 
−
* Beenden der Subshell; danach ist der Prozess der aufrufenden Shell beendet
 
−
 
 
−
=== source skript oder . skript (r) ===
 
−
* Lesen der Skriptdatei durch die aktuelle Shell
 
−
* Der interaktive Modus der aktuellen Shell wird „unterbrochen“
 
−
* Kommandos werden nacheinander abgearbeitet
 
−
''(Es wird kein neuer Prozess gestartet; Variablen und Umgebungen bleiben in dieser Shell gültig.)''
 
−
 
 
−
== Vergleich der Aufrufarten ==
 
−
 
 
−
{| border=1 cellpadding="2"
 
−
|-
 
−
! Aufrufart
 
−
! Startet neue Shell
 
−
! Kennt $0
 
−
! Behält Variablen
 
−
! Ausführungsrecht nötig
 
−
|-
 
−
| bash skript
 
−
| ja
 
−
| ja
 
−
| nein
 
−
| nein
 
−
|-
 
−
| bash < skript
 
−
| ja
 
−
| nein
 
−
| nein
 
−
| nein
 
−
|-
 
−
| ./skript
 
−
| ja
 
−
| ja
 
−
| nein
 
−
| ja
 
−
|-
 
−
| exec ./skript
 
−
| nein (ersetzt aktuelle)
 
−
| ja
 
−
| nein
 
−
| ja
 
−
|-
 
−
| source skript oder . skript
 
−
| nein
 
−
| ja
 
−
| ja
 
−
| nein
 
−
|}
 
−
 
 
−
=Aufgaben=
 
−
 
 
−
== Aufgabe 1 – Skript erstellen ==
 
−
*Erstellen Sie ein einfaches Skript mit dem Namen '''skript''', das folgende Befehle enthält:*
 
−
** date
 
−
** hostname
 
−
** echo $0
 
−
** echo $$
 
−
 
 
−
== Aufgabe 2 – Verschiedene Aufrufarten testen ==
 
−
*Führen Sie das Skript nacheinander auf die folgenden Arten aus:*
 
−
** '''bash skript'''
 
−
** '''bash < skript'''
 
−
** '''./skript'''
 
−
** '''exec ./skript'''
 
−
** '''source skript''' bzw. '''. skript'''
 
−
*Beobachten und notieren Sie, welche Unterschiede Sie feststellen.*
 
−
 
 
−
== Aufgabe 3 – Auswertung ==
 
−
*Beantworten Sie die folgenden Fragen:*
 
−
** Welche Varianten starten eine neue Subshell?
 
−
** Bei welchen Varianten bleibt die aktuelle Shell erhalten?
 
−
** Bei welchen Aufrufen kennt die Shell den Namen des Skripts (''$0'')?
 
−
** Bei welchen bleibt die Prozess-ID (''$$'') gleich?
 
−
 
 
−
== Zusatzaufgaben ==
 
−
*Reichen Sie die Befehle '''ls''', '''ip a''' und '''id''' in einem Skript aneinander und führen Sie es aus.*
 
−
*Wie bestimmt man, welcher Shell das Skript übergeben wird?*
 
−
*Welche Möglichkeiten gibt es, ein Skript aufzurufen, und wie unterscheiden sie sich?*
 
−
 
 
−
== Aufrufarten von Bash-Skripten ==
 
−
 
 
−
Ein Bash-Skript kann auf unterschiedliche Weise gestartet werden. 
 
−
Je nach Aufruf unterscheidet sich, ob eine neue Subshell gestartet wird, ob der Name des Skripts bekannt ist und ob Variablen erhalten bleiben.
 
−
 
 
−
=== bash skript (r) ===
 
−
* Starten einer Subshell
 
−
* Lesen der Skriptdatei von der Subshell
 
−
* Kommandos werden nacheinander abgearbeitet
 
−
* Beenden der Subshell und Rückkehr zur aufrufenden Shell 
 
−
''(Die Shell, die das Skript abarbeitet, kennt den Namen des Shellskriptes)''
 
−
 
 
−
=== bash < skript (r) ===
 
−
* Starten einer Subshell
 
−
* Lesen der Skriptdatei von der Subshell über Umleitung
 
−
* Kommandos werden nacheinander abgearbeitet
 
−
* Beenden der Subshell und Rückkehr zur aufrufenden Shell 
 
−
''(Die Shell, die das Skript abarbeitet, kennt den Namen des Shellskriptes nicht)''
 
−
 
 
−
=== ./skript (rx) ===
 
−
* Starten einer Subshell
 
−
* Lesen der Skriptdatei von der Subshell
 
−
* Kommandos werden nacheinander abgearbeitet
 
−
* Beenden der Subshell und Rückkehr zur aufrufenden Shell 
 
−
''(Die Shell, die das Skript abarbeitet, kennt den Namen des Shellskriptes; es muss zusätzlich das Ausführungsrecht gesetzt sein.)''
 
−
 
 
−
=== exec ./skript (rx) ===
 
−
* Die Subshell ersetzt die aktuelle Shell (überlädt die aktuelle Shell)
 
−
* Lesen der Skriptdatei
 
−
* Kommandos werden nacheinander abgearbeitet
 
−
* Beenden der Subshell; danach ist der Prozess der aufrufenden Shell beendet
 
−
 
 
−
=== source skript oder . skript (r) ===
 
−
* Lesen der Skriptdatei durch die aktuelle Shell
 
−
* Der interaktive Modus der aktuellen Shell wird „unterbrochen“
 
−
* Kommandos werden nacheinander abgearbeitet
 
−
''(Es wird kein neuer Prozess gestartet; Variablen und Umgebungen bleiben in dieser Shell gültig.)''
 
−
 
 
−
== Vergleich der Aufrufarten ==
 
−
 
 
−
{| border=1 cellpadding="2"
 
−
|-
 
−
! Aufrufart
 
−
! Startet neue Shell
 
−
! Kennt $0
 
−
! Behält Variablen
 
−
! Ausführungsrecht nötig
 
−
|-
 
−
| bash skript
 
−
| ja
 
−
| ja
 
−
| nein
 
−
| nein
 
−
|-
 
−
| bash < skript
 
−
| ja
 
−
| nein
 
−
| nein
 
−
| nein
 
−
|-
 
−
| ./skript
 
−
| ja
 
−
| ja
 
−
| nein
 
−
| ja
 
−
|-
 
−
| exec ./skript
 
−
| nein (ersetzt aktuelle)
 
−
| ja
 
−
| nein
 
−
| ja
 
−
|-
 
−
| source skript oder . skript
 
−
| nein
 
−
| ja
 
−
| ja
 
−
| nein
 
−
|}
 
−
 
 
−
=Aufgaben=
 
−
 
 
−
== Aufgabe 1 – Skript erstellen ==
 
−
*Erstellen Sie ein einfaches Skript mit dem Namen '''skript''', das folgende Befehle enthält:*
 
−
** date
 
−
** hostname
 
−
** echo $0
 
−
** echo $$
 
−
 
 
−
== Aufgabe 2 – Verschiedene Aufrufarten testen ==
 
−
*Führen Sie das Skript nacheinander auf die folgenden Arten aus:*
 
−
** '''bash skript'''
 
−
** '''bash < skript'''
 
−
** '''./skript'''
 
−
** '''exec ./skript'''
 
−
** '''source skript''' bzw. '''. skript'''
 
−
*Beobachten und notieren Sie, welche Unterschiede Sie feststellen.*
 
−
 
 
−
== Aufgabe 3 – Auswertung ==
 
−
*Beantworten Sie die folgenden Fragen:*
 
−
** Welche Varianten starten eine neue Subshell?
 
−
** Bei welchen Varianten bleibt die aktuelle Shell erhalten?
 
−
** Bei welchen Aufrufen kennt die Shell den Namen des Skripts (''$0'')?
 
−
** Bei welchen bleibt die Prozess-ID (''$$'') gleich?
 
−
 
 
−
== Zusatzaufgaben ==
 
−
*Reichen Sie die Befehle '''ls''', '''ip a''' und '''id''' in einem Skript aneinander und führen Sie es aus.*
 
−
*Wie bestimmt man, welcher Shell das Skript übergeben wird?*
 
−
*Welche Möglichkeiten gibt es, ein Skript aufzurufen, und wie unterscheiden sie sich?*
 

Version vom 17. Oktober 2025, 13:39 Uhr