======Einfache Shellscripte======
**Shellscripte** sind einfache Textdateien, die Shellbefehle enthalten. Um sie auszuführen, müssen wir entweder die Datei ausführbar machen oder sie mit einer Shell aufrufen. Bevor wir Shellscripte erstellen, sollten wir etwas über Dateirechte in Linux wissen.
=====Dateirechte in Linux=====
Eine Datei bzw. ein Verzeichnis gehört in Linux einem Benutzer (user - u) bzw. einer Gruppe (group - g) von Benutzern. Außerdem gibt es noch die Kategorie "Andere" (other - o), die alle Systembenutzer umfasst. Jede dieser Kategorien kann bezüglich einer Datei die folgenden Rechte haben.
r - read : Die Datei kann gelesen werden.
w - write : Die Datei kann geschrieben bzw. gelöscht werden.
x - execute : Die Datei kann ausgeführt werden.
Bei Verzeichnissen bedeutet x, dass man in das Verzeichnis wechseln darf.
Die Rechte einer Datei bzw. eines Verzeichnisses kann man sich mit den Befehl ''%%ls -l%%'' anzeigen lassen.
user@linux-sr:~$ ls -l
...
drwxr-xr-x 2 user user 4096 Mär 18 07:43 Dokumente
...
-rw-rw-r-- 1 user user 0 Mär 23 12:22 test.txt
...
Vor dem Verzeichnis Dokumente steht die Auflistung ''%%drwxr-xr-x%%''. Das d bedeutet, dass es sich um ein Verzeichnis handelt. Dann folgen dreimal die Buchstaben rwx bzw. Striche. Das erste Tripel gilt für den den Besitzer, das zweite für die Gruppe, das dritte für alle sonstigen. Wenn der entsprechende Buchstabe steht, ist das recht gesetzt, wenn der Strich steht ist das Recht nicht gesetzt. Die Bezeichnung ''%%user user%%'' bedeutet, dass die Datei dem Nutzer user (erstes user) und der Gruppe user (zweites user) gehört.
Alle Nutzer, die Schreibrechte haben, können die Rechte einer Datei mit dem Befehl ''%%chmod%%'' ändern. Bei Shellscripten ist es notwendig, den Nutzer Ausführungsrechte für das Script zu geben. Dies kann man mit den folgenden Befehl machen:
user@linux-sr:~$ chmod u+x beispielscript.sh
Mit diesem Befehl erhält der Besitzer Ausführungsrechte für die Datei ''%%beispielscript.sh%%''.
Eine ausführliche Darstellung des Befehls ''%%chmod%%'' findet man hier: https://www.shellbefehle.de/befehle/chmod/ .
=====Der Editor nano=====
Wenn man sich via Kommandozeile mit dem Befehl ''%%ssh%%'' in einen Linuxrechner einloggt, kann man keinen grafischen Editor benutzen. Hier bietet sich der recht einfach zu bedienende Editor **nano** an. Mit dem Befehl
user@linux-sr:~$ nano beispielscript.sh
{{ :profil:klasse9:nano.png?600 |}}
kann man die Datei ''%%beispielscript.sh%%'' bearbeiten. Wenn die Datei nicht existiert, wird sie neu angelegt. Mit **STRG-O** kann man die Datei speichern, mit **STRG-X** kann man das Programm beenden.
Eine genauere Bedienungsanleitung von **nano** findet man hier:
https://www.raspberry-pi-geek.de/ausgaben/rpg/2018/06/einfuehrung-in-den-texteditor-nano/
=====Shellscripte Erstellen und Ausführen====
====Unser erstess Script====
Unser script soll in der Datei ''%%beispielscript.sh%%'' stehen. Bei Shellscripten ist die Endung ''%%.sh%%'' üblich. Wir öffnen also die Datei mit **nano**:
user@linux-sr:~$ nano beispielscript.sh
Nun tragen wir alle Befehle in nano ein. Das Script soll ein Verzeichnis "beispielverzeichnis" anlegen, es mit ''%%ls -l%%'' anzeigen und danach wieder löschen:
mkdir beispielverzeichnis
ls -l
rmdir beispielverzeichnis
{{ :profil:klasse9:nano_mit_script.png?600 |}}
Mit **STRG-O** und **ENTER** kann man die Datei jetzt speichern.
Jetzt müssen wir das Script ausführbar machen und danach können wir es ausführen. Es ist günstig eine weitere Shellsitzung zu öffnen, dann können wir den Editor geöffnet lassen.
Um dass Script ausführbar zu machen, geben wir das folgende ein:
user@linux-sr:~$ chmod u+x beispielscript.sh
Die müssen wir nur einmal tun. Jetzt können wir das Script ausführen:
user@linux-sr:~$ ./beispielscript.sh
insgesamt 8
-rwxrw-r-- 1 user user 58 Mär 24 10:30 beispielscript.sh
drwxrwxr-x 2 user user 4096 Mär 24 10:30 beispielverzeichnis
Das ''%%./%%'' vor dem Dateiname ist notwendig, damit das Script im Dateiname gefunden wird.
====Shebang====
Normalerweise werden Shellbefehle einfach ausgeführt. Wenn aber die Befehle in einer anderen Shell ausgeführt werden sollen (z.B. Bash-Befehle in einen Z-Shell) ist es sinnvoll, vor die Befehle eine sogenannten Shebang zu schreiben, der die richtige Shell startet. Für die Bash sieht der Shebang so aus:
#!/bin/bash
Somit sieht unser vollständiges Script ''%%beispielscript.sh%%'' so aus:
#!/bin/bash
mkdir beispielverzeichnis
ls -l
rmdir beispielverzeichnis
**Aufgabe 16**
Teste das Beispielscript und den Editor Nano!
**Aufgabe 17**
Schreibe ein Shellscript ''%%meinscript.sh%%'' das folgendes leistet:
* die folgende Ordnerstruktur wird erstellt und mit dem Befehl ''%%tree%%'' ausgegeben
{{ :profil:klasse9:baum.png?600 |}}
* die Datei ''%%adressen.txt%%'' wird in den Ordner Glauchau kopiert
* man wechselt in den Ordner Glauchau
* es werden die ersten zwei Zeilen der Datei ''%%adressen.txt%%'' ausgegeben
* es werden die letzten beiden Zeilen der Datei ''%%adressen.txt%%'' ausgegeben
* die zweite Spalte der Datei ''%%adressen.txt%%'' (nach dem Komma) wird in die Datei ''%%test.txt%%'' umgeleitet
* die Anzahl der Zeichen, Zeilen und Worte der Datei ''%%adressen.txt%%'' wird ausgegeben.
* wechsele mit einem Befehl in das Elternverzeichnis von Erde
=====Weiteres zur Shellprogrammierung====
Eine ausführliche Einführung in die Bashprogrammierung findet man z.B. hier:
* https://www-user.tu-chemnitz.de/~hot/unix_linux_werkzeugkasten/links.html
* https://de.wikibooks.org/wiki/Linux-Praxisbuch/_Shellprogrammierung