- Mitglied seit
- 15. Mai 2008
- Beiträge
- 21.900
- Punkte für Reaktionen
- 14
- Punkte
- 0
In diesem Workshop geht es um Shell-Skripte.
Die Shell kann nicht nur interaktiv mit Kommandos oder Tools gefüttert werden. Da man die Tastatur-Eingabe ja auch auf eine Datei umlenken kann (redirigieren), ist es also auch kein besonderes Problem, vorgefertigte Shell-Anweisungen quasi als Batch aus einer Datei heraus zu lesen und zu verarbeiten. Die Dateien, in denen 'konservierte' Shell-Anweisungen stehen, nennt man Shell-Skripte.
Um mit solche Skript-Dateien einigermaßen gut umgehen zu können, braucht man einen Editor, welcher Linux-Zeilenenden beherrscht, weil andere Zeilenenden ein Problem für die Shell darstellen. Als Editor kann man den 'vi' verwenden, aber auch andere Editoren sind denkbar. Zum 'vi' gibt im Wiki eine Einführung, deswegen wird hier weder über den 'vi' noch einen anderen Editor weiter etwas ausgeführt. In den folgenden Beispielen werden die Skript-Dateien einfach per 'cat' angelegt; das ist ein Behelf - so etwas würde man normalerweise eher nicht machen.
Man kann der Shell die Skript-Datei 'skript1' auch als Aufruf-Parameter mitgeben. Eine Kurzschreibweise ist der '.' - allerdings muss man dann einen Pfad zum Skript angeben:
Da Shell-Skripte oft wie 'normale' Kommandos oder Tools zum Einsatz kommen sollen, gibt es auch die Möglichkeit, ein Shell-Skript direkt aufzurufen. Allerdings ist hierfür eine einmalige Vorbereitung notwendig, nämlich der Skript-Datei die Ausführungs-Erlaubnis (execution permission) zu erteilen. Dies geht mit dem 'chmod +x'-Kommando:
Wenn man jetzt den aktuellen Pfad noch in die PATH-Variable aufnimmt, dann ist das Starten eine Shell-Skriptes kaum mehr von einem normalen Kommando zu unterscheiden:
Weil es oft mehrere Shells auf einem Linux-System gibt, die sich alle ein wenig in der Leistungsfähigkeit unterscheiden, hat es sich eingebürgert, zusätzlich in die Shell-Skripte eine Kommentarzeile als erste Zeile einzubauen, in der der Pfad zu der konkret zu verwendenden Shell bzw. Kommandointerpreter steht. Diese Eintragung nennt man 'Shebang':
Wie bei den Shell-Funktionen kann man auch Aufrufargumente bei Shell-Skripten verwenden:
Fast alle interaktiven Shells können beim Aufruf durch ein sogenanntes Start-Skripte vorkonfiguriert werden. Damit dies sowohl für jeden User als auch individuell pro User möglich ist, gibt es hierfür mindestens 2 Skript-Dateien, die natürlich auch fehlen dürfen, aber eigentlich immer vorhanden sind: /etc/profile (für alle User) und $HOME/.profile (für den individuellen User), wobei immer erst die /etc/profile gestartet wird, bevor die $HOME/.profile heran kommt. Nun sind noch nicht alle Details bereits angesprochen worden, aber ein Blick lohnt sich alle Male. Ich werde die Dateien jetzt hier nicht komplett hineinstellen, sondern nur die ersten 3 Zeilen:
Da steh schon mal Manches doppelt drin und auch andere Ungereimtheiten ... that's life. Wenn man also etwas für seine Shell fest einrichten mag, dann wäre die $HOME/.profile für den Anfang genau die richtige Skript-Datei (z. B. alias-Einträge).
=======
Viel Spaß beim Shell-Skripten.
Itari
=========================================
Sinnvollerweise sind die Shell-Workshops aufeinander aufgebaut.
Shell-Workshop (8)
Shell-Workshop (10)
Die Shell kann nicht nur interaktiv mit Kommandos oder Tools gefüttert werden. Da man die Tastatur-Eingabe ja auch auf eine Datei umlenken kann (redirigieren), ist es also auch kein besonderes Problem, vorgefertigte Shell-Anweisungen quasi als Batch aus einer Datei heraus zu lesen und zu verarbeiten. Die Dateien, in denen 'konservierte' Shell-Anweisungen stehen, nennt man Shell-Skripte.
Um mit solche Skript-Dateien einigermaßen gut umgehen zu können, braucht man einen Editor, welcher Linux-Zeilenenden beherrscht, weil andere Zeilenenden ein Problem für die Shell darstellen. Als Editor kann man den 'vi' verwenden, aber auch andere Editoren sind denkbar. Zum 'vi' gibt im Wiki eine Einführung, deswegen wird hier weder über den 'vi' noch einen anderen Editor weiter etwas ausgeführt. In den folgenden Beispielen werden die Skript-Dateien einfach per 'cat' angelegt; das ist ein Behelf - so etwas würde man normalerweise eher nicht machen.
Rich (BBCode):
Syno> cat >skript1
echo 'Hallo'
<Strg-D>
Syno> sh <skript1
Hallo
Man kann der Shell die Skript-Datei 'skript1' auch als Aufruf-Parameter mitgeben. Eine Kurzschreibweise ist der '.' - allerdings muss man dann einen Pfad zum Skript angeben:
Rich (BBCode):
Syno> sh skript1
Hallo
Syno> . ./skript1
Hallo
Da Shell-Skripte oft wie 'normale' Kommandos oder Tools zum Einsatz kommen sollen, gibt es auch die Möglichkeit, ein Shell-Skript direkt aufzurufen. Allerdings ist hierfür eine einmalige Vorbereitung notwendig, nämlich der Skript-Datei die Ausführungs-Erlaubnis (execution permission) zu erteilen. Dies geht mit dem 'chmod +x'-Kommando:
Rich (BBCode):
Syno> chmod +x skript1
Syno> ./skript1
Hallo
Wenn man jetzt den aktuellen Pfad noch in die PATH-Variable aufnimmt, dann ist das Starten eine Shell-Skriptes kaum mehr von einem normalen Kommando zu unterscheiden:
Rich (BBCode):
Syno> PATH=.:$PATH
Syno> skript1
Hallo
Weil es oft mehrere Shells auf einem Linux-System gibt, die sich alle ein wenig in der Leistungsfähigkeit unterscheiden, hat es sich eingebürgert, zusätzlich in die Shell-Skripte eine Kommentarzeile als erste Zeile einzubauen, in der der Pfad zu der konkret zu verwendenden Shell bzw. Kommandointerpreter steht. Diese Eintragung nennt man 'Shebang':
Rich (BBCode):
Syno> cat >skript1
#!/bin/sh
echo 'Hallo'
<Strg-D>
Syno> sh <skript1
Hallo
Wie bei den Shell-Funktionen kann man auch Aufrufargumente bei Shell-Skripten verwenden:
Rich (BBCode):
Syno> cat >skript2
#!/bin/sh
echo $1
Syno> chmod +x skript2
Syno> skript2
Syno> skript2 abc
abc
Syno> skript2 abc 123
abc
Fast alle interaktiven Shells können beim Aufruf durch ein sogenanntes Start-Skripte vorkonfiguriert werden. Damit dies sowohl für jeden User als auch individuell pro User möglich ist, gibt es hierfür mindestens 2 Skript-Dateien, die natürlich auch fehlen dürfen, aber eigentlich immer vorhanden sind: /etc/profile (für alle User) und $HOME/.profile (für den individuellen User), wobei immer erst die /etc/profile gestartet wird, bevor die $HOME/.profile heran kommt. Nun sind noch nicht alle Details bereits angesprochen worden, aber ein Blick lohnt sich alle Male. Ich werde die Dateien jetzt hier nicht komplett hineinstellen, sondern nur die ersten 3 Zeilen:
Rich (BBCode):
Syno> cat /etc/profile
#/etc/profile: system-wide .profile file for ash.
PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin"
umask 022
..........
Syno> cat $HOME/.profile
#/etc/profile: system-wide .profile file for ash.
PATH="$PATH:/opt/bin:/opt/sbin"
umask 022
..........
Da steh schon mal Manches doppelt drin und auch andere Ungereimtheiten ... that's life. Wenn man also etwas für seine Shell fest einrichten mag, dann wäre die $HOME/.profile für den Anfang genau die richtige Skript-Datei (z. B. alias-Einträge).
=======
Viel Spaß beim Shell-Skripten.
Itari
=========================================
Sinnvollerweise sind die Shell-Workshops aufeinander aufgebaut.
Shell-Workshop (8)
Shell-Workshop (10)
Zuletzt bearbeitet: