Linux Tutorium. 12. Shellprogrammierung. Version vom 02.07.2008 13:38:56



Ähnliche Dokumente
Linux Prinzipien und Programmierung

Erwin Grüner

Luis Kornblueh. May 22, 2014

Aufgabensammlung IT Shellprogrammierung Teil I

Skripte. Beispiel. M. Fyta Computergrundlagen 73/93

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Übung 4: Schreiben eines Shell-Skripts

Arge Betriebsinformatik GmbH & Co.KG, CAP News 40, Februar CAP-News 40

Anleitung über den Umgang mit Schildern

Übung: Entwickeln eines Shell-Skripts

Übersicht Programmablaufsteuerung

Der zweite all unsere Datenbanken. Dieser Befehl ist etwas komplexer, aber bis auf das Passwort (kursiv fett) so zu übernehmen:

Mediator 9 - Lernprogramm

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Einführung in die Programmierung

Entwurf von Algorithmen - Kontrollstrukturen

1 Vom Problem zum Programm

Excel Funktionen durch eigene Funktionen erweitern.

Diana Lange. Generative Gestaltung Operatoren

Objektorientiertes Programmieren mit Suse Linux

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

SelfLinux cron

5. Tutorium zu Programmieren

Shell-Programmierung

P r o g r a m m a b l a u f s t e u e r u n g

Hardware - Software - Net zwerke

1 Mathematische Grundlagen

Einführung in die C++ Programmierung für Ingenieure

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Datenbanken Kapitel 2

4.1 Wie bediene ich das Webportal?

Erstellen der Barcode-Etiketten:

AutoCAD Dienstprogramm zur Lizenzübertragung

Programmierkurs Java

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Stand: Adressnummern ändern Modulbeschreibung

Import und Export von Übergängern

Step by Step Softwareverteilung unter Novell. von Christian Bartl

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Viele Bilder auf der FA-Homepage

Bedienungsanleitung: Onlineverifizierung von qualifiziert signierten PDF-Dateien

Druckerscriptsprache

Lua Grundlagen Einführung in die Lua Programmiersprache

AutoTexte und AutoKorrektur unter Outlook verwenden

Programmierung in C. Grundlagen. Stefan Kallerhoff

Jederzeit Ordnung halten

Sichern auf den zentralen TSM-Servern unter Windows. Sichern auf den zentralen TSM-Servern unter Windows

Wir arbeiten mit Zufallszahlen

Serienbrieferstellung in Word mit Kunden-Datenimport aus Excel

Kontrollstrukturen, Strukturierte Programmierung

Kontrollstrukturen und Funktionen in C

Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt

I.1 Die Parrot Assemblersprache

Einführungskurs MOODLE Themen:

Übungen Programmieren 1 Felix Rohrer. Übungen

2. Im Admin Bereich drücken Sie bitte auf den roten Button Webseite bearbeiten, sodass Sie in den Bearbeitungsbereich Ihrer Homepage gelangen.

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen

Virtuelle COM-Schnittstelle umbenennen

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.)

Internet online Update (Mozilla Firefox)

CMS.R. Bedienungsanleitung. Modul Cron. Copyright CMS.R Revision 1

Wie kann ich in der Backstage-Ansicht eigene Dokumentationen einbinden?

ACDSee 10. ACDSee 10: Fotos gruppieren und schneller durchsuchen. Was ist Gruppieren? Fotos gruppieren. Das Inhaltsverzeichnis zum Gruppieren nutzen

Menü Macro. WinIBW2-Macros unter Windows7? Macros aufnehmen

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Visual Basic Express erstes Projekt anlegen

VBA mit Excel Grundlagen und Profiwissen

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

Graphic Coding. Klausur. 9. Februar Kurs A

Inhaltsverzeichnis

teamsync Kurzanleitung

Installationsleitfaden kabelsafe backup professional unter MS Windows

Hilfedatei der Oden$-Börse Stand Juni 2014

WinCVS Version 1.3. Voraussetzung. Frank Grimm Mario Rasser

PHP 5.4 ISBN Stephan Heller, Andreas Dittfurth 1. Ausgabe, September Grundlagen zur Erstellung dynamischer Webseiten GPHP54

Bereich METIS (Texte im Internet) Zählmarkenrecherche

1. Aktionen-Palette durch "Fenster /Aktionen ALT+F9" öffnen. 2. Anlegen eines neuen Set über "Neues Set..." (über das kleine Dreieck zu erreichen)

Dokumentation IBIS Monitor

ANWENDUNGSHINWEISE ZU SYMBOLSTIX

Kontrollstrukturen - Universität Köln

WinVetpro im Betriebsmodus Laptop

Einführung zum Arbeiten mit Microsoft Visual C Express Edition

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

ZAHLUNGSAVIS. Im Zahlungsprogrammteil automatisch erstellen

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

NEUES BEI BUSINESSLINE WINDOWS

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Die Captimizer BTZ-Datei 2015

Kulturelle Evolution 12

SRH - Kurzinformation

Softwarelösungen: Versuch 4

Fall 1: Neuinstallation von MyInTouch (ohne Datenübernahme aus der alten Version)

Anlage eines neuen Geschäftsjahres in der Office Line

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Transkript:

Linux Tutorium 12. Shellprogrammierung Version vom 02.07.2008 13:38:56

im Grunde ist ein Shell-Skript nichts anderes als eine Textdatei, welche Befehlsfolgen enthält Shell-Skripte werden im Wesentlichen aus zwei Gründen geschrieben 1.man kann so ständig wiederkehrende Kommandos zusammenfassen und diese durch einen einfachen Aufruf starten (z.b. Backup von Logfiles) 2.weil man so einfache Programme schreiben kann, welche relativ intelligente/komplexe Aufgaben erledigen können (z.b. Kopie einer Audio-CD -> umwandeln in MP3 Format -> Archivierung der Stücke nach Spieldauer)

für komplexe, zeitkritische oder langwierige Aufgaben sollte man besser zu mächtigeren Sprachen wie Perl, Python oder in Extremfällen zu C / C++ / Java greifen Ablauf zu Beginn muss mit Hilfe eines Editors (z.b. nano oder gedit ) eine Textdatei angelegt werden, in die der Quelltext geschrieben wird ist der gewünschte Quellcode enthalten sollte die Datei unter geeignetem Namen gespeichert werden z.b. backup.sh

hierfür nicht den Namen test verwenden, es existiert ein Unix-Systemkommando mit diesem Namen Shell-Skripte werden mit der Endung.sh versehen nach dem Abspeichern der Datei unter einem geeigneten Namen muss diese ausführbar gemacht werden (z.b. chmod 755 backup.sh) sind die benötigten Rechte gesetzt kann das Skript gestartet werden (am Beispiel von backup.sh) im lokalen Verzeichnis durch./backup.sh In einem beliebigen Ordner # /ordner/ordner2/backup.sh

Aufbau ein Shell-Skript beginnt mit der Angabe des Kommandointerpreters (Zeile 1 ist der Pfad zu dem Programm, das die folgenden Zeilen interpretieren kann) #!/bin/sh Verweis auf die Bourne-Shell die restlichen Zeilen des Skripts werden von dieser Shell ausgeführt dies kann alternativ auch eine andere Shell als die Bash sein danach kommen meist Kommentare, die Meta- Informationen über das Shell-Skript enthalten z.b.

Aufbau(2) # Author: $author # Last Modification: $date es folgen Kommandos und Kontrollstrukturen Kommandos sind durch eine neue Zeile oder Semikolon zu trennen

Kommandos und Kontrollstrukturen Kommentare in Shellskripts können über das Raute-Zeichen (#) Kommentare eingeleitet werden Ausgenommen von dieser Kommentarregel sind jedoch die ersten zwei Zeichen der ersten Zeile, die den Interpreter angeben #!/bin/sh # ich bin ein Kommentar

Kommandos und Kontrollstrukturen(II) Variablen in einem Shell-Skript hat man verschiedene Möglichkeiten, Variablen einzusetzen anders als in den meisten modernen Programmiersprachen gibt es keine Datentypen wie Integer, Float oder Strings alle Variablen werden grundsätzlich als String gespeichert soll die Variable die Funktion einer Zahl übernehmen, dann muss das verarbeitende Programm die Variable entsprechend interpretieren (für arithmetische Operationen steht das Programm expr zur Verfügung)

Kommandos und Kontrollstrukturen(III) Variablen(2) es ist auch möglich, in einer Variable einen Shell-Befehl abzulegen die Belegung einer Variablen erfolgt, indem man dem Namen mit dem Gleichheitszeichen einen Wert zuweist es darf zwischen dem Namen und dem Gleichheitszeichen keine Leerstelle stehen, ansonsten erkennt die Shell den Variablennamen nicht als solchen und versucht, ein gleichnamiges Kommando auszuführen tier=hund var1=`pwd` echo $tier Hund echo $var1 /home/gates

Kommandos und Kontrollstrukturen(IV) Variablen(3) um auf den Inhalt einer Variablen zuzugreifen, leitet man den Variablennamen durch ein $-Zeichen ein das Quoten dient dazu, bestimmte Zeichen mit einer Sonderbedeutung vor der Shell zu 'verstecken' um zu verhindern, dass diese ersetzt werden (var=abc) \ das Zeichen nach einem \ wird wörtlich genommen ' ' alles zwischen diesen Zeichen wird wörtlich genommen, mit Ausnahme eines weiteren ' und \ (echo '$var' liefert als Ausgabe $var) " " alles zwischen diesen Zeichen ist buchstabengetreu zu interpretieren (echo "$var" liefert abc)

Kommandos und Kontrollstrukturen(V) Variablen(4) Beispiele Quoting $ echo 'Ticks "schützen" Anführungszeichen' Ticks "schützen" Anführungszeichen $ echo "Ist dies ein \"Sonderfall\"?" Ist dies ein "Sonderfall"? $ echo "Es gibt `ls wc -l` Dateien in `pwd`" Es gibt 43 Dateien in /home/rschaten $ echo "Der Wert von \$x ist $x" Der Wert von $x ist 100

Kommandos und Kontrollstrukturen(VI) Vordefinierte Variablen es gibt eine Reihe vordefinierter Variablen, deren Benutzung ein wesentlicher Bestandteil des Shell- Programmierens ist alle aktuell definierten Variablen können durch das Kommando set aufgelistet werden wichtig sind u.a. HOME PATH Home-Directory (absoluter Pfad) Suchpfad für Kommandos und Skripts PS1 System-Prompt ($ oder #) PS2 Prompt für Anforderung weiterer Eingaben (>) SHELL Name der Shell

Kommandos und Kontrollstrukturen(VII) Variablen-Substitution unter Variablen-Substitution versteht man verschiedene Methoden, um die Inhalte von Variablen zu benutzen das umfasst sowohl die einfache Zuweisung eines Wertes an eine Variable als auch einfache Möglichkeiten zur Fallunterscheidung z.b. ${var:-value} benutze var wenn gesetzt, sonst value ${var:?value} benutze var wenn gesetzt, sonst gib value aus ${#var} Anzahl der Zeichen in var

Kommandos und Kontrollstrukturen(VIII) Bedingte Anweisungen if hat einen einfachen Aufbau, wobei man stets darauf achten sollte, die nötigen Leerzeichen um die eckigen Klammern zu setzen hinter dem if-befehl selbst folgt die in der Regel in eckigen Klammern eingeschlossene Bedingung darauf folgt das Schlüsselwort then, das die Anweisungen einleitet, die abgearbeitet werden sollen, sofern diese Bedingung erfüllt ist elif ist die erste Bedingung nicht erfüllt, wird (wenn vorhanden) die nächste Bedingung über elif geprüft

Kommandos und Kontrollstrukturen(IX) Bedingte Anweisungen(2) ist auch diese Bedingung nicht erfüllt, werden die restlichen elif- Bedingungen so lange überprüft, bis entweder eine Bedingung erfüllt oder keine weitere elif-bedingung mehr vorhanden ist else sind alle Bedingungen nicht erfüllt, werden (wenn vorhanden) die Anweisungen hinter dem else-schlüsselwort ausgeführt fi die if-anweisung wird durch das Schlüsselwort fi beendet eine if-anweisung muss nicht zwingend eine elif- oder eine else-anweisung beinhalten!

Beispiel if-anweisung if [ Bedingung ] then Anweisung1 Anweisung2 elif [ BedingungN ] then Anweisung1 Anweisung2 else Anweisung1 fi

Kommandos und Kontrollstrukturen(IX) Bedingte Anweisungen(3) case bei case werden die möglichen Fälle, die eintreten können, explizit angegeben das von der if-anweisung bekannte else-schlüsselwort finden wir in ähnlicher Form (durch den Fall * ) auch für die case- Anweisung vor ein Anweisungsblock für einen Fall ist durch zwei Semikolons abzuschließen *) der Fall *) enthält die Anweisungen, die ausgeführt werden sollen, wenn keiner der zuvor aufgeführten Fälle eintritt esac die case-anweisung wird durch das Schlüsselwort esac beendet

Beispiel case-anweisung ZAHL=5 case $ZAHL in 3) echo "Die Zahl ist 3!" ;; 4) echo "Die Zahl ist 4!" ;; *) echo "Zahl ist nicht 3 oder 4!" ;; esac

Kommandos und Kontrollstrukturen(X) Schleifen auch in der Shell stehen einem bei Bedarf verschiedene Schleifen zur Verfügung while, for, until, seq while und for sind in ihrer Funktion von anderen Programmiersprachen bekannt neu hinzu kommt die until-schleife, die eine Art Negation der while-schleife darstellt

Kommandos und Kontrollstrukturen(XI) Schleifen while die while-schleife setzt sich aus einer bedingten Anweisung, wie sie bereits aus der if-anweisung bekannt ist, und einem Anweisungsblock zusammen der Anweisungsblock wird durch das Schlüsselwort do eingeleitet und durch das Schlüsselwort done beendet while [ Bedingung ] do Anweisung1 Anweisung2... done

Kommandos und Kontrollstrukturen(XII) Schleifen(2) for for arbeitet einen Anweisungsblock mit jedem angegebenen Wert einmal durch dieser Wert wird während des Durchlaufens des Anweisungsblocks an die Variable VAR zugewiesen, mit der die Anweisungen arbeiten können der Anweisungsblock beginnt mit do und wir mit done beendet for VAR in WERT1 WERT2 WERT3 do Anweisung1 Anweisung2 done

Kommandos und Kontrollstrukturen(XIII) Schleifen(3) until der Anweisungsblock der until-schleife wird so lange ausgeführt, wie die Bedingung nicht erfüllt ist while [! 1 ]; do echo Test; done until [ 1 ]; do echo Test; done

Kommandos und Kontrollstrukturen(XIV) Schleifen(4) seq seq wurde entwickelt um eine Schleife mit einer Ziffernfolge durchlaufen zu können primitivste Form einer Zählschleife soll seq beispielsweise alle Zahlen von 1 bis 3 auflisten, dann ist dies ganz einfach (man übergibt den Start- und Endwert) möchte man seq nun in eine Schleife packen, wird am besten die Kommandosubstitution verwendet for i in `seq 1 3` do echo "$i" done

Kommandos und Kontrollstrukturen(XV) Schleifen(5) break um eine Schleife mitten im Durchlauf an einer beliebigen Position zu verlassen, muss man nur das break-schlüsselwort an die jeweilige Stelle setzen dies funktioniert sowohl mit while- als auch mit for- und until- Schleifen while true do anweisung1 anweisung2 && break done

Kommandos und Kontrollstrukturen(XVI) select ein Menü lässt sich schnell und gleichzeitig einfach in ein Skript einbauen, indem man die select-anweisung verwendet der Aufbau von select gestaltet sich ähnlich wie der Aufbau der for-schleife select VAR in WERT1 WERT2 do Anweisung1 Anweisung2... done

select-beispiel #!/bin/bash echo "Was haben Sie für ein Haustier?" select HAUSTIER in Hund Katze Maus do echo "Sie haben also ein/eine(n) $HAUSTIER" echo "Kann Ihr Haustier programmieren?" done

Kommandos und Kontrollstrukturen(XVI) Funktionen eine Funktion in der Shell besteht aus einem Funktionskopf und einem Anweisungsblock der Funktionskopf gibt den Namen der Funktion an function NAME oder NAME() der Anweisungsblock wird durch geschweifte Klammern begrenzt Funktionsname() { } Anweisung1 Anweisung2

Kommandos und Kontrollstrukturen(XVII) Funktionen(2) Shell-Skripts können mit Parametern aufgerufen werden, auf die über ihre Positionsnummer zugegriffen werden kann $# Anzahl der Argumente $0 Name des Kommandos $1-$9 1.-9. Argument $@ alle Argumente $* alle Argumente konkateniert anders als bei Programmiersprachen wie C werden die Funktionsparameter nicht zuvor festgelegt, benannt oder bekommen gar Datentypen

Beispiel Funktionsparameter nachfolgend wird eine Funktion beschreiben, die das Quadrat einer Zahl bildet quadr() { } expr $1 \* $1 wird die Funktion nun aufrufen, übergeben wir einfach eine Zahl als Parameter($1 = 3) $ quadr() { expr $1 \* $1; } $ quadr 3 -> 9

Kommandos und Kontrollstrukturen(XVIII) Funktionen(3) Shell-Funktionen haben noch eine weitere Eigenschaft: Sie können einen Wert zurückgeben man nennt diesen Wert daher den Rückgabewert mithilfe dieses Rückgabewertes kann in der Shell geprüft werden, ob die Ausführung einer Funktion oder eines Programms erfolgreich war dabei wird der Rückgabewert in der Variable $? gespeichert um diese Funktion im eigenen Shellskript zu nutzen, baut man die Anweisung return in den Funktionscode ein

Beispiel Rückgabewert dols() { cd $1 if [ "$?" = "1" ]; then return 1; fi ls if [ "$?" = "1" ]; then return 1; fi return 0 } --------------------------------------------------------------------------------------------------------------- $ dols /root; echo $? (Aufruf der Funktion) cd: /root: Permission denied 1

Kommandos und Kontrollstrukturen(XIX) die Anzahl an weiteren Kommandos, Operationen und Möglichkeiten ist gigantisch u.a. Arrays, Datenströme, Mustererkennung, Arithmetische Ausdrücke,...