Linux Prinzipien und Programmierung



Ähnliche Dokumente
Luis Kornblueh. May 22, 2014

Skripte. Beispiel. M. Fyta Computergrundlagen 73/93

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

Übersicht Programmablaufsteuerung

Erwin Grüner

Einführung in die Programmierung

Finder > 'Programme' > 'Dienstprogramme' > 'Terminal'

Zur drittletzten Zeile scrollen

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

Software- und Druckerzuweisung Selbstlernmaterialien

Shell-Programmierung

Barcodedatei importieren

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

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

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach

Systemvoraussetzung < zurück weiter >

Einführung in die C-Programmierung

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

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

Umleiten von Eigenen Dateien per GPO

L A TEX, Linux, Python

S7-Hantierungsbausteine für R355, R6000 und R2700

Übung 4: Schreiben eines Shell-Skripts

Einführung zum Arbeiten mit Microsoft Visual C Express Edition

Angewandte Mathematik und Programmierung

Einführung Unix Shell

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

Programmierung in C. Grundlagen. Stefan Kallerhoff

Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten

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

Mediator 9 - Lernprogramm

Kontrollstrukturen, Strukturierte Programmierung

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

Entwurf von Algorithmen - Kontrollstrukturen

Bedienungsanleitung: Onlineverifizierung von qualifiziert signierten PDF-Dateien

Aufgabensammlung IT Shellprogrammierung Teil I

Viele Bilder auf der FA-Homepage

Fehlermonitor. Software zur seriellen Verbindung PC-Airdos Visualdatensignale und Fehlermeldungen-Ausagabe per SMS / Drucker

WINLINK 2000 SPAM-KONTROLLE UND NACHRICHTEN PRIORITÄTEN Aktualisiert 27. März 2012

Elexis-BlueEvidence-Connector

Übung: Entwickeln eines Shell-Skripts

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

Gibt Daten im erweiterten Format aus. Dies beinhaltet die Angabe von Zugriffsrechten, Besitzer, Länge, Zeitpunkt der letzten Änderung und mehr.

Hochschule München, FK 03 FA SS Ingenieurinformatik

Automatisierung ( Fernsteuerung ) von Excel unter Microsoft Windows Tilman Küpper (tilman.kuepper@hm.edu)

AutoCAD Dienstprogramm zur Lizenzübertragung

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

Microsoft Word Serienbriefe. Microsoft Word Serienbriefe

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Übungen Programmieren 1 Felix Rohrer. Übungen

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

X Anmelden am System. X System herunterfahren. X Grundlegendes zur Shell. X Das Hilfesystem. X Dateioperationen. X Bewegen im Verzeichnisbaum

Dokumentation. Black- und Whitelists. Absenderadressen auf eine Blacklist oder eine Whitelist setzen. Zugriff per Webbrowser

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

Installation OMNIKEY 3121 USB

Zahlen auf einen Blick

Übung - Arbeiten mit CLI-Befehlen in Windows

Gemeinsamer Bibliotheksverbund: Übertragung von Datenexporten für den Verbundkatalog Öffentlicher Bibliotheken

Anton Ochsenkühn. amac BUCH VERLAG. Ecxel für Mac. amac-buch Verlag

Anleitung für die Teilnahme an den Platzvergaben "Studio II, Studio IV und Studio VI" im Studiengang Bachelor Architektur SS15

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Umwandeln und Exportieren von Adobe-Illustrator-Dateien in Illustrator für Artcut

Anzeige von eingescannten Rechnungen

Programmierkurs Java

! " # $ " % & Nicki Wruck worldwidewruck

MMS - Update auf Version 4.4

Schnellanleitung: Verbuchung von Studien- und Prüfungsleistungen

Einführung in PHP. (mit Aufgaben)

Fotogalerie mit PWGallery in Joomla (3.4.0) erstellen

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

ecaros2 - Accountmanager

Internationales Altkatholisches Laienforum

SRH - Kurzinformation

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

WinWerk. Prozess 6a Rabatt gemäss Vorjahresverbrauch. KMU Ratgeber AG. Inhaltsverzeichnis. Im Ifang Effretikon

Import und Export von Übergängern

Das Festkomitee hat die Abi-Seite neu konzipiert, die nun auf einem (gemieteten) Share Point Server

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Lua Grundlagen Einführung in die Lua Programmiersprache

BBCode v2.0. Einleitung...2 Installation... 3 Bugfixliste Inhaltsverzeichnis. Überarbeiteter BBCode + neuem Interface.

Hardware - Software - Net zwerke

Ihre Lizenz ändern. Stand 01/2015

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

Anleitung über den Umgang mit Schildern

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Professionelle Seminare im Bereich MS-Office

Leere Zeilen aus Excel-Dateien entfernen

BELIEBIG GROßE TAPETEN

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen

SOFiSTiK AG Installationsanleitung

Datenexport aus JS - Software

Informatik Grundlagen, WS04, Seminar 13

1 Vom Problem zum Programm

Kurzanleitung Verwendung von USB-Sticks

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

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

White Paper - Umsatzsteuervoranmeldung Österreich ab 01/2012

Zwischenablage (Bilder, Texte,...)

1. EINLEITUNG 2. GLOBALE GRUPPEN Globale Gruppen anlegen

Dateimanagement in Moodle Eine Schritt-für

Transkript:

Linux Prinzipien und Programmierung Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2014 1 / 25 2 / 25 Pipes Die Bash kennt drei Standard-Dateideskriptoren: Standard In (stdin) Standard-Eingabe, i. A. die Tastatur, Standard Out (stdout) Standard-Ausgabe, i. A. das aktuelle Terminal, Standard Error (stderr) Standard-Fehler, i. A. auch das aktuelle Terminal. 3 / 25 Handout S. 1

Umleiten von Ein- und Ausgabe wc -w < hallo.txt Inhalt von hallo.txt als stdin für wc -w (Zählen der Wörter) verwenden. cat hallo.txt wc -w Inhalt von hallo.txt nach stdout ausgeben, stdout aber als stdin für wc -w verwenden. echo "Hallo Welt" > hallo.txt Ausgabe in Datei hallo.txt schreiben (evtl. alter Inhalt wird überschrieben). echo "Hallo Welt" >> hallo.txt Ausgabe an Datei hallo.txt anhängen. gcc -c test.c 2> error.log Fehlermeldungen in Datei schreiben. cmd1 tee dateiname Ausgabe parallel in Datei loggen. 4 / 25 Wildcards, Backticks * Beliebig viele (auch null) Zeichen,? genau ein (beliebiges) Zeichen, [afz] eines der angegebenen Zeichen, [a-f] eines der Zeichen aus dem angegebenen Bereich, `cmd`, ${cmd} wird durch Ausgabe von cmd ersetzt, 5 / 25 Variablen Die Denition von Variablen erfolgt mit var=value (ohne Leerzeichen) und der Zugriff mit $var. Zu Beachten ist die unterschiedliche Expansion von Variablen innerhalb von Anführungszeichen, z. B. name=klaus echo "Hallo $name" echo Hallo $name Im ersten Fall wird die Variable expandiert, im zweiten Fall nicht. 6 / 25 Handout S. 2

Globale und lokale Variablen Die Unterscheidung zwischen lokalen und globalen Variablen in der bash ist sehr missdeutig, denn diese betrifft lediglich die Frage, ob Variablen an Subshells weitergegeben werden. Siehe dazu folgendes Beispiel: varglobal="foo" export varglobal varlokal="bar" echo $varglobal echo $varlokal bash echo $varglobal echo $varlokal exit 7 / 25 Parametersubstitution ${var:-default} Der Inhalt von $var, falls diese nicht leer ist, sonst default, ${var#pattern} Der Inhalt von $var, wobei am Anfang ggfs. pattern entfernt wird (bei Wildcards kürzestmöglich), ${var##pattern} dto., aber bei Wildcards größtmögliche Entfernung von pattern, ${var%pattern} Der Inhalt von $var, wobei am Ende ggfs. pattern entfernt wird (bei Wildcards kürzestmöglich), ${var%%pattern} dto., aber bei Wildcards größtmögliche Entfernung von pattern, 8 / 25 Kontrollstrukturen Die bash kennt die Kontrollstrukturen, die auch in anderen Programmiersprachen üblich sind: if, case, while, for. Besonderheit ist, dass die Schleifen durch done, die bedingten Anweisungen jeweils durch den umgedrehten Namen beendet werden, case z. B. durch esac. 9 / 25 Handout S. 3

Shell-Skripte in einer Datei Ein Shell-Skript kann auch in eine Datei geschrieben werden. Ubnterscheide dabei./myscript von../myscript: Ersteres wird in einer Subshell ausgeführt, letzteres in der aktuellen Shell. Achtung: Das aktuelle Verzeichnis ist meist nicht in $PATH enthalten, daher der Aufruf./myscript! Damit das Skript direkt ausgeführt werden kann, muss es für den aktuellen User executable (Zugriffsrecht x) sein. 10 / 25 Wie wird eine Datei ausgeführt In Linux haben Dateiendungen i. A. keine spezische Bedeutung. Eine ausführbare Datei kann daher sowohl ein kompiliertes Programm sein, aber auch ein Skript, das mit der Bash oder aber einem Interpreter wie Perl oder Python ausgeführt werden kann. Woher weiß Linux nun, womit ein solches Skript ausgeführt werden soll? Hierfür existiert ein besonderer Kommentar in der ersten Zeile, durch den angegeben wird, in welchem Interpreter das Skript laufen soll, z. B. #! /bin/bash #! /usr/bin/perl #! /usr/bin/python oder auch #! /usr/bin/env python (womit python in $PATH gesucht wird). 11 / 25 Einfaches Shell-Skript Im folgenden soll ein Shell-Skript entwickelt werden, das alle ausführbaren Dateien in einem Verzeichnis ausführt. Ein erster Ansatz könnte so aussehen: #! /bin/bash dir=$1 echo "Executing all in $dir" for f in $dir/* do echo "Executing $f" $f done 12 / 25 Handout S. 4

Analyse Im Prinzip funktioniert das Skript bereits: Das Argument 1 der Kommandozeile wird als Verzeichnisname übernommen und in einer for-schleife werden dann alle Dateien darin ausgeführt. Allerdings gibt es ein paar Probleme: Wird das Skript ohne Argumente aufgerufen, so wird versucht, alle Skripte in / auszuführen. Wird der Verzeichnisname mit / am Ende angegeben, erscheint dieser in der Ausgabe doppelt. Es wird nicht geprüft, ob das Verzeichnis überhaupt existiert. Es wird auch versucht, nicht ausführbare Dateien auszuführen. Es ndet keine Überprüfung statt, ob die einzelnen Programme erfolgreich liefen. 13 / 25 Prüfen auf Argument Mit folgendem Code wird ein evtl. am Ende des ersten Argumentes vorhandenes /-Zeichen entfernt und anschließend geprüft, ob der Verzeichnisname leer ist: dir=${1%/} if [ -z "$dir" ] echo "Usage: $(basename $0) dirname" exit 1 (NB: Hierdurch wird auch verhindert, dass das Skript mit / direkt aufgerufen wird!) 14 / 25 Argumente eines Skripts Beim Aufruf eines Skripts stehen der Befehl, mit dem das Skript aufgerufen wurde, sowie die übergebenen Argumente als Variablen zur Verfügung: $0 Name des Skriptes $1, $2,... Übergebene Argumente $# Zahl der Argumente $* Alle Argumente in einer Variablen (immer in " einschließen!) Mit shift kann ein Argument aus der Parameterliste entfernt werden. 15 / 25 Handout S. 5

Testen auf Existenz des Verzeichnisses Nun wird geprüft, ob das Verzeichnis überhaupt existiert: if [! -d "$dir" ] echo "Directory $dir does not exist" exit 2 16 / 25 Selektives Ausführen von Dateien for f in $dir/* do [ -d "$f" ] && continue [ -x "$f" ] continue echo "Executing $f" $f ret=$? if [ $ret -ne 0 ] echo "$f failed with return status $ret" done 17 / 25 Analyse Nun wird in der for-schleife zunächst geprüft, ob es sich bei der im Verzeichnis bendlichen Datei um ein Verzeichnis handelt, falls ja, wird es übersprungen, dann wird geprüft, ob die Datei ausführbar ist, sonst wird sie übersprungen. Nach dem Ausführen einer Datei wird nun der Status der Ausführung geprüft. Falls ein Fehler auftrat (Status ungleich 0), wird eine Meldung ausgegeben. Der Ausführungsstatus des letzten Befehles bendet sich dabei jeweils in der Variablen $?. 18 / 25 Handout S. 6

Prüfen auf Optionen in der Kommandozeile Nun soll das Skript mit einigen Optionen aufgerufen werden können: exec_all [--log=logle] [--stop-on-error] dirname wobei mit der ersten Option ein Dateiname angegeben wird, in den die Ausgabe bei Ausführen der Programme umgeleitet wird. Bei Angabe der zweiten Option soll das Skript beendet werden, wenn es beim Ausführen eines Programms zu einem Fehler kam, d. h. alle weiteren Programme in dem Verzeichnis werden nicht mehr ausgeführt. 19 / 25 Realisierung #! /bin/bash usage() { echo "Usage: $(basename $0) [--log logle] [--stop-on-error] dirname" } log= stop_error=no while [ "$1"!= "${1#-}" ] do option=$1 case $option in -) shift break 20 / 25 --log=*) log=${option#--log=} shift --log) log=$2 shift 2 --stop-on-error) stop_error=yes shift 21 / 25 Handout S. 7

esac done *) usage echo "Unknown option $option" exit 1 22 / 25 dir=${1%/} if [ -z "$dir" ] usage exit 1 if [! -d "$dir" ] echo "Directory $dir does not exist" exit 2 23 / 25 echo "Executing all in $dir" for f in $dir/* do [ -d "$f" ] && continue [ -x "$f" ] continue echo "Executing $f" if [ -z "$log" ] $f else $f >$log 24 / 25 Handout S. 8

ret=$? if [ $ret -ne 0 ] echo "$f failed with return status $ret" [ "$stop_error" = "yes" ] && break done 25 / 25 Handout S. 9