FIXME **Diese Seite ist noch nicht Fertig. Für alle die unterstützen möchten haltet euch bitte an das Tutorial von tutorials.de.** ====== Einführung in Shell-Scripte ====== Ein Shell-Script ist eine Textdatei, in der Kommandos gespeichert sind. Es stellt selbst ein Kommando dar, da es wie ein Systemkommando, auch mit Parametern, aufgerufen werden kann. Shell-Scripts dienen der Arbeitserleichterung und (nach ausreichenden Tests) der Erhöhung der Zuverlässigkeit, da sie gestatten, häufig gebrauchte Sequenzen von Kommandos zusammenzufassen. Ein Anwendungsbeispiel wäre das nächtliche Kopieren von wichtigen Daten auf einen anderen Rechner im Netzwerk, oder das bearbeiten (z.B. umbenennen oder Rechte setzen) vieler Datein auf einen Schlag. Es gibt unzählige weitere Anwendungsmöglichkeiten. Auch auf unseren Treffen sprechen wir ab und an über kleine Scripte wie zum Beispiel bei der [[Fernwartung mit x11vnc]]. Wer den Umgang mit solchen Scripten und der Konsole erlernen möchte ist bei diesem Tutorial gut aufgehoben. Als Vorlage hierfür habe ich das Tutorial "Unix Einführung Shell Scripte" auf [[http://www.tutorials.de/content/1190-unix-einfuehrung-shell-scripte.html|tutorials.de]] verwendet und modifiziert. ==== Vorraussetzung ==== Da wir uns auf einer Lug-Seite befinden setze ich vorraus das ein Installiertes Linux-System vorliegt. Das und etwas Interesse sollten ausreichen um das Tutorial durchführen zu können. ==== Ziel ==== Am Ende des Tutorials ist man in der Lage eigene kleine Shell-Scripte (Programme) zu schreiben und auch der Umgang mit dem Terminal (im folgenden Konsole genannt) wird einem viel einfacher fallen als vorher. ===== Erste Ausgabe ===== * Wie in so gut wie allen Tutorials fängt auch dieses mit dem berühmten "Hallo Welt" teil an. Zunächst öffnen wir das Terminal und erstellen uns einen Ordner für die Dateien für das Tutorial. Dies gelingt uns mit dem Befehl ''mkdir shellscripte''. Nun wechseln wir in diesen Ordner mit ''cd shellscripte''. Nun erstellen wir mit Hilfe von ''touch 01_ausgabe'' die Datei in der wir unseren Code einbringen. Im folgenden werden wir mit dem Texteditor vi arbeiten der auf den meisten System installiert sein sollte. Mit ''vi 01_ausgabe'' öffnen wir die Datei. Noch befinden wir uns im Kommandomodus, um nun etwas in die Datei zu schreiben drücken wir ''i'' um den Insert Modus zu aktivieren und schreiben folgenden einzeiler in die Datei: echo "Hallo Welt" ''echo'' gibt den Teil der in ''"'' steht zurück. Um den Einfügemodus wieder zu verlassen tippen wir einfach einmal kurz auf die ESC-Taste. Jetzt wollen wir das Script speichern und den vi verlassen. Dazu drücken wir bei gedrückter Shift-Taste zwei mal die Z-Taste. (wesentlich bekannter ist die Variante an dieser Stelle :wq einzugeben und mit Enter zu bestätigen. Jeder so wie er es mag...) Nun führen wir das Script mit ''sh 01_ausgabe'' aus und sollten auf der Konsole nun ein "Hallo Welt" sehen können. ===== Benutzereingabe ===== * Was ist schon ein Programm ohne Benutzereingaben entgegen nehmen zu können? Im Folgenden wird erklärt wie man im Script mit dem Nutzer interagieren kann. Zunächst legen wir eine neue Datei an und öffnen sie im Editor: touch 02_eingabe vi 02_eingabe Nachdem wir mit ''i'' in den Insert-Mode gewechselt sind geben wir folgende Zeilen in das Script ein: clear echo -n "Bitte gebe deinen Namen ein: " read name echo "" echo "Hallo ${name}" echo "" Schauen wir uns an, was dort geschieht: Mit dem Schlüsselwort ''clear'' wird die Konsole "aufgeräumt", sprich: der Inhalt gelöscht. Werden wir gleich sehen, wenn wir das Script ausführen. Wir wollen uns von anfang an daran gewöhnen den Code möglichst übersichtlich zu halten, daher folgt nach ''clear'' auch eine Leerzeile. Was "echo" bringt, wissen wir ja bereits. Neu ist hier nur das Argument ''-n''. Mit diesem Argument geben wir an, dass der Cursor am Ende der Ausgabe stehen bleiben soll, so dass wir unseren Namen in der gleichen Zeile eingeben müssen. Das Werkzeug ''read'' nimmt dann unseren eingegebenen Namen entgegen und speichert ihn in der Variable "name". Mit dem nun folgenden "echo"-Befehl fügen wir einfach nur eine Leerzeile bei der späteren Ausgabe ein. Nun kommen wir zur eigentlichen Ausgabe. Gar nicht schwer! Wir nehmen die eben gefüllte Variable "name" mit in unsere Ausgabe auf. Uns fällt auf, dass dort plötzlich ein Doller-Zeichen gefolgt von einer geschweiften Klammer vorangestellt ist. Immer wenn wir an den Wert einer Variable wollen, also den Inhalt auslesen möchten, schreiben wir ein ''${variable}''. Es ist möglich die Variable auch nur mit ''$variable'' auszugeben. Jedoch wird in verschieden Styleguides((Es gibt Styleguides für den Aufbau von Code. Diese Anleitungen sind von entwicklern zusammengetragen worden um einen leicht verständlichen Code zu erhalten den man auch nach Monaten noch nachvollziehen kann. Es wird angeraten diesen Leitlinien zu folgen um den Überblick zu bewahren und den Code bei bedarf weitergeben zu können.)) die oben beschriebene Variation empfohlen. Speichern wir wieder mit gedrückter Shift-Taste und zweimaligen drücken der z-Taste und führen das Script aus. sh 02_eingabe Bitte gebe deinen Namen ein: Sebastian Hallo Sebastian So wie wir eben einen String (eine Zeichenkette; unseren Namen) eingelesen haben, ist auch das Einlesen von Zahlen kein Problem - dazu ebenfalls ein kleines Beispiel. Dazu legen wir keine neue Datei an. Wir erweitern das Script von eben, also öffnen wir es mit ''vi 02_eingabe''. Um nun schreiben zu können drücken wir wieder die ''i''-Taste und ergänzen das Script um die fehlenden Zeilen. clear echo -n "Bitte gebe deinen Namen ein: " read name echo -n "und wie alt bist du? " read -p alter echo "" echo "Mein Name ist ${name} und ich bin ${alter} Jahre alt." echo "" Es ist möglich die Eingaben in eine Zeile zu verkürzen: //read -p "und wie alt bist du? " alter// Hierbei übernimmt read auch die Ausgabe der Frage.