Unix-Shells Shell: Unix-Shell-Varianten:

Slides:



Advertisements
Ähnliche Präsentationen
Ausführen.
Advertisements

DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Forschungszentrum caesar
Zusammenfassung der Vorwoche
4. Serverbasierte Programmierung: Perl 4.1Grundlagen 4.1.1HTTP-Server und CGI-Schnittstelle 4.1.2Formulare 4.1.3Ein einfaches Perl Programm 4.2Interaktion.
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Sortierverfahren Richard Göbel.
Dateihandles Um in Perl eine bestimmte Datei zum Lesen, Schreiben oder Anhängen zu öffnen, benötigt man so genannte Dateihandles. Ein Dateihandle ist der.
Programmierkurs für absolute Anfänger Listen und Arrays Caren Brinckmann Sommersemester 2005.
Funktion defined Die Funktion defined testet, ob eine Variable einen anderen Wert als undef enthält. Ist der Wert undef, so wird falsch zurückgegeben,
Übungen 10 Leute haben das erste Übungsblatt allein bearbeitet bzw. separat abgegeben. Wichtig: Übungspartner finden! Außerdem: Lösungen nur einmal abgeben.
Flussdiagramm: längster Laut und seine Dauer
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (17 –Turingmaschinen) Prof. Dr. Th. Ottmann.
1A: POSIX POSIX (Portable Operating System) ist ein Standard für UNIX-Systeme. Er dient dazu, Programme portabel unter UNIX und Derivaten zu tauschen und.
Robotik mit LEGO Mindstorms
Perl-Grundlagen Teile der Präsentation von A. Grupp,
Eingabeaufforderung (EA) Windows I Nützliche Kommandos (Kommando und /? liefert meist eine Liste von Optionen): cd bzw. chdir: change directory, wechselt.
Imperative Programmierung
Die Skriptsprache Perl (2) Wolfgang Friebel DESY Zeuthen.
UNIX SHELL Christian Benz SS #!/bin/bash.
Excel Kurs Teil VII Textfunktionen ( TEXT, LÄNGE, LINKS, RECHTS, TEIL, FINDEN ) Einladen von Textdateien Text in Spalten F. Bäumer.
Batch-Programmierung Grundlagen
Vortrag: Martin Hiersche
UNIX-Dateisystem Vortrag: Ronny Kuhnert am
DVG Ablaufsteuerung
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Welche Funktion hat die php.ini? -Beinhaltet wichtige Einstellungen für PHP. Genannt seien hier u.a. der Speicherort von Cookies, Parameter der Kompilierung,
Einleitung Suse Linux (System- und Software-Entwicklung) Allgemein:
Linux GOIT – Der Kurs. Linux GOIT – Der Kurs Geschichte Mainframes (IBM System/360) Workstation Personal Computer Stapelverarbeitung Workstation Mehrbenutzersystem.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Seminar Internet Technologien
FORTRAN 77.
Wiederholte Programmausführung
Betriebssysteme: Unix
Einführung in 2 Betriebssysteme
PHP Basic.
Dynamische Webseiten-Generierung
Einführung in PHP.
Einführung in PHP 5.
Agenda für heute, 20. April, 2006 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Agenda für heute, 14. April, 2005 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
3. Lineare Befehle 3.1 Die Ausgabefunktion
BMEVIEEA100 Grundlagen der Programmierung
PHP: Operatoren und Kontrollstrukturen
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
Kommandozeile und Batch-Dateien Molekulare Phylogenetik – Praktikum
Einführungstutorial: Linux Konsole
1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen.
Excel Grundlagen.
Shell-Programmierung
1 Tagesüberblick 4 Lösung Hausaufgabe/Fragen Mustervergleiche.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Blockseminar Allgemeine Technologien II Dozent: P. Sahle März 2009 PHP in HTML Referentin: Angela Brinck.
1 Tagesüberblick 5 Lösung Hausaufgabe/Fragen Assoziative Felder Funktionen zu Variablenbehandlung.
1 Lösung Hausaufgabe 5-1 Seite 1 #!perl -w # Datei Oeffnen und Variablen initialisieren $infile = "daten5-3.txt"; $im=$iw=$sm=$sw=0; open (IN,$infile)
Programmierungssprache PERL
(Syntax, Strings/Zahlen, Variablen, Arrays)
1 Tagesüberblick 7 Lösung Hausaufgabe/Fragen mehrdimensionale Datenstrukturen Module Fehlersuche Zusammenfassung Feedback.
Delphi Chars und Strings
Übung Betriebssystem, Uni Innsbruck 1 Projekt1: Prozesse unter Unix Teil I Grundlagen von Unix.
Variablen und Datentypen
WiWi WS2015 Excel Grundlagen Fachbereich Wirtschaftswissenschaften.
Die Bourne-Shell (cygwin), UNIX- Tools und treetagger Seminar: Strukturierung und Analyse linguistischer Korpusdaten Leiter: Leiter: Dr. Christian Riepl.
Regular Expressions HBU-LINUX-2003 Adduser.sh? My_user_Verw.sh? AufgUser.sh? Wo ist das Script ??????? /home/donald ? /home ? /tmp ?
Besitzrechte. Datei- und Verzeichnis-Besitzer Dateien und Verzeichnisse gehören einem Benutzer und einer Gruppe Besitzer wird bei ls -l in der dritten.
1 Shell Manuel Blechschmidt & Volker Grabsch CdE Sommerakademie 2006 Kirchheim.
Betriebssysteme LB BB SS2017
 Präsentation transkript:

Programmierkurs für absolute Anfänger  Unix-Befehle und bash-Skripte Caren Brinckmann Sommersemester 2005 http://www.coli.uni-saarland.de/~cabr/teaching.php

Unix-Shells Shell: Unix-Shell-Varianten: Schnittstelle zwischen Benutzer und Betriebssystem: Die Aktionen des Benutzers werden via Shell an den Betriebssystemkern (Kernel) weitergeleitet. Befehlszeileninterpreter, der Eingabezeilen (interaktiv oder aus einem Shell-Skript) auswertet und die entsprechenden Befehle ausführt. Unix-Shell-Varianten: sh: "Bourne Shell", klassische Shell von Unix-Systemen csh: "C-Shell", Einsatz von C-ähnlichen Konstrukten bei der Programmierung tcsh: "Tenex C-Shell", Weiterentwicklung der C-Shell ksh: "Korn Shell", verbesserte Version der Bourne-Shell (History-Mechanismus) bash: "Bourne Again Shell", Standard-Shell unter Linux, Kombination der Features der sh, (t)csh und ksh + weitere Features Programmierkurs für absolute Anfänger – Sitzung 14

bash: Grundlagen Starten der bash: Terminal-Fenster aufmachen (falls bash nicht die Standard-Shell ist: bash) Version: Strg-x Strg-v (aktuell: Version 3) Prompt (Zeichen am Anfang der Zeile): $ Nach dem Prompt kann der Benutzer Befehle eingeben, die dann die Shell durch entsprechende Systemaufrufe ausführt: $ Befehl Optionen Argumente z.B.: $ perl -w meinprogramm.pl Die Online-Hilfe zu jedem Befehl erhält man mit man, z.B.: $ man perl Eine Folge von Befehlen kann auch in eine Datei geschrieben werden, ein so genanntes Shell-Skript. Beim Aufruf eines Skripts arbeitet die Shell die Befehle Schritt für Schritt ab. Ein bash-Skript kann folgendermaßen aufgerufen werden: $ bash meinskript Programmierkurs für absolute Anfänger – Sitzung 14

mehrere Befehle in einer Zeile mehrere Befehle sollen nacheinander ausgeführt werden: $ ersterBefehl ; zweiterBefehl der zweite Befehl soll nur dann ausgeführt werden, wenn der erste Befehl fehlerfrei ausgeführt werden konnte: $ ersterBefehl && zweiterBefehl der zweite Befehl soll nur dann ausgeführt werden, wenn der erste Befehl nicht fehlerfrei ausgeführt werden konnte: $ ersterBefehl || zweiterBefehl Pipeline: die Ausgabe des ersten Befehls wird direkt in den Eingabekanal des zweiten Befehls geleitet: $ ersterBefehl | zweiterBefehl Programmierkurs für absolute Anfänger – Sitzung 14

Ein- und Ausgaben umlenken Standardeingabe aus Datei beziehen: $ Befehl < Datei Standardausgabe in Datei umlenken (die Fehlermeldungen erscheinen weiterhin auf dem Bildschirm): $ Befehl > Datei Standardfehlerausgabe in Datei umlenken: $ Befehl 2> Datei Standardausgabe und Standardfehlerausgabe in dieselbe Datei umlenken: $ Befehl &> Datei Standardausgabe und Standardfehlerausgabe in verschiedene Dateien umlenken: $ Befehl > Ausgabedatei 2> Fehlerdatei Anhängen statt Überschreiben: >> Programmierkurs für absolute Anfänger – Sitzung 14

Befehle: Dateien und Verzeichnisse (1) pwd (print working directory): aktuelles Verzeichnis anzeigen ls (list contents of directory): Dateinamen auflisten mkdir (make directory): neues Verzeichnis anlegen $ mkdir Programmierkurs cd (change directory): aktuelles Verzeichnis wechseln $ cd Programmierkurs $ cd .. $ cd – cp (copy files): Dateien kopieren $ cp meinprogramm.pl kopie.pl $ cp meinprogramm.pl Programmierkurs/ rm (remove files): Dateien und Verzeichnisse löschen $ rm test.txt $ rm -r Testverzeichnis Programmierkurs für absolute Anfänger – Sitzung 14

Befehle: Dateien und Verzeichnisse (2) mv (move files): Dateien und Verzeichnisse verschieben oder umbenennen $ mv meinprogramm.pl deinprogramm.pl $ mv deinprogramm.pl Programmierkurs/ $ mv Programmierkurs Perlkurs basename: eigentlichen Dateinamen aus einem Pfadnamen extrahieren $ basename /home/CE/cabr/test.txt test.txt $ basename /home/CE/cabr/test.txt .txt test dirname: Verzeichnispfad aus einem Pfadnamen extrahieren $ dirname /home/CE/cabr/test.txt /home/CE/cabr Programmierkurs für absolute Anfänger – Sitzung 14

Befehle: Dateien (1) cat (concatenate): Dateieninhalt auf die Standardausgabe ausgeben $ cat text1.txt text2.txt > text1und2.txt cmp (compare): zwei Dateien vergleichen $ cmp text1.txt text2.txt Die Dateien dürfen auch Binärdateien sein. Wenn die beiden Dateien identisch sind, wird nichts ausgegeben. diff (differential file compare): zwei Textdateien vergleichen $ diff text1.txt text2.txt Es wird ausgegeben, in welchen Zeilen die Dateien sich unterscheiden. wc (word count): Zeilen, Wörter und Zeichen eines Textes zählen $ wc text1.txt Optionen: -l nur die Zeilen zählen (lines) -w nur die Wörter zählen (words) -c nur die Zeichen zählen (characters) Programmierkurs für absolute Anfänger – Sitzung 14

Befehle: Dateien (2) sox: Sounddateien in andere Formate konvertieren $ sox test.wav test.raw $ sox -r 16000 -w -s kkos025.raw kkos025.wav (e)grep: Suchen in Dateien mit regulären Ausdrücken $ grep 'M[ea][iy]er' namen.txt gibt alle Zeilen aus, die der reguläre Ausdruck matcht sort: sortieren von Dateien uniq: aufeinanderfolgende identische Zeilen nur einmal ausgeben tr: bestimmte Zeichen eines Textes durch andere ersetzen cut: nur bestimmte Spalten einer Datei ausgeben Programmierkurs für absolute Anfänger – Sitzung 14

Ausgabe echo Ausgabe auf dem aktuellen Terminal mit abschließendem Zeilenumbruch Option -e: Sonderzeichenausgabe $ echo -e "Datum\tUhrzeit" Option -n: kein abschließender Zeilenumbruch printf formatierte Ausgabe: printf "Format" Daten wie in Perl, nur dass die Daten nicht durch Kommas voneinander getrennt werden (nur durch Leerzeichen), z.B.: $ printf "%.0f\t%s\n" 2.6 hallo Sonderzeichen im Formatstring funktionieren Programmierkurs für absolute Anfänger – Sitzung 14

Eingaben einlesen read: liest eine Zeile von der Standardeingabe ohne Angabe von Variablen: Eingabe wird in $REPLY gespeichert $ while read; do echo $REPLY; done mit Angabe von Variablen: Eingabe wird bei Leerzeichen in einzelne Zeichenketten aufgeteilt $ read a b c; echo $c $a $b Programmierkurs für absolute Anfänger – Sitzung 14

Variablen (1) Variablentypen: Variablenzuweisung: Variable=Wert interne Variablen der bash, z.B. $GROUPS Liste aller Gruppen zu denen der Benutzer gehört $RANDOM Zufallszahl zwischen 0 und 32767 Variablen, die vom Betriebssystem abhängig sind, z.B. $PWD Pfad des aktuellen Verzeichnisses $HOME Homeverzeichnis des Benutzers Positionsparameter: aufrufende Argumente frei verwendbare Variablen Variablenzuweisung: Variable=Wert Achtung: keine Leerzeichen vor oder hinter dem Gleichheitszeichen! Falls eine Variable noch nicht existiert, wird sie automatisch erzeugt. $ a=2 $ b=hallo $ c='hallo du' Nicht-initialisierte Variablen enthalten automatisch die leere Zeichenkette. Programmierkurs für absolute Anfänger – Sitzung 14

Variablen (2) Variablenauswertung: Alle Variablen werden durch das Voranstellen eines Dollarzeichens ausgewertet, d.h. durch ihren aktuellen Inhalt ersetzt. $ echo $a $b $c Der Namen der Variablen kann dafür auch in geschweifte Klammern gesetzt werden. $ meinevariable=66 $ echo ${meinevariable} Programmierkurs für absolute Anfänger – Sitzung 14

Positionsparameter Einem Shell-Skript können beim Aufruf Argumente übergeben werden, die innerhalb des Skripts in speziellen Variablen, den Positionsparametern, zur Verfügung stehen: $1 enthält das erste Argument, $2 das zweite usw. $0 enthält den Namen des aktuell ausgeführten Shell-Skripts mehrstellige Positionsparameternummern müssen in geschweifte Klammern gesetzt werden, z.B. ${12} Spezielle Variablen: $# Anzahl der gesetzten Positionsparameter $@ Liste mit allen Positionsparametern, d.h. ($1 $2 $3 ...) $* alle Positionsparameter als eine Zeichenkette, d.h. "$1 $2 $3 ..." shift: entfernt das erste Element aus der Liste der Positionsparameter, d.h. alle Werte werden um eins nach vorne geschoben Programmierkurs für absolute Anfänger – Sitzung 14

Arrays erster Index ist 0 $ zahlen=(null eins zwei drei) $ zahlen[4]=vier $ echo ${zahlen[2]} letzter Index: ${#zahlen[*]} $ echo ${#zahlen[*]} Ausgabe des Arrays als Liste (Elemente getrennt durch Leerzeichen): $ echo ${zahlen[@]} Die Ausgabe eines Befehls kann in einem Array (oder in einer skalaren Variablen) gespeichert werden: array=($(Befehl)) $ lsausgabe=($(ls)) Programmierkurs für absolute Anfänger – Sitzung 14

Arithmetik Die bash kann nur mit ganzen Zahlen rechnen. Syntax: $(( Berechnung )) Beispiel: $ a=5 $ echo $(( $a/2 )) Rest $(( $a%2 )) 2 Rest 1 mathematische und logische Operatoren und ihre Präzedenz wie in Perl (ggf. Klammern setzen): + - * / % && || ! Post-Inkrement und -Dekrement: ++ und -- $ a=4 $ echo $((a++)) 4 $ echo $a 5 Programmierkurs für absolute Anfänger – Sitzung 14

Expandierungen (1) Expandierungen: systematisches Ersetzen einzelner Ausdrücke in einer Befehlszeile Klammerersetzungen: $ echo B{ee,i,oo,ro}t Beet Bit Boot Brot Tilde-Ersetzungen: ~/ $HOME ~Benutzer/ $HOME des Benutzers ~+/ $PWD Programmierkurs für absolute Anfänger – Sitzung 14

Expandierungen (2) Dateinamensexpandierung: * beliebig viele Zeichen (auch keines) ? genau ein beliebiges Zeichen [abc] ein Zeichen aus der Zeichenmenge [^abc] ein Zeichen, das nicht in der Zeichenmenge enthalten ist Mengen können auch als Bereiche definiert werden, z.B.: [A-Z] ein Großbuchstabe [0-9] eine Ziffer Bsp: alle Dateinamen auflisten, die auf .pdf enden $ ls *.pdf Programmierkurs für absolute Anfänger – Sitzung 14

Variablen- und Parameterersetzungen (1) Teile der Zeichenkette im Inhalt einer Variablen werden entfernt oder durch eine andere Zeichenkette ersetzt, bevor die Ausgabe erfolgt. Der Inhalt der Variablen selbst wird nicht verändert! Entfernen non-greedy von links: ${Variable#Muster} entfernt den kleinsten Teil vom Inhalt der Variablen von links Entfernen greedy von links: ${Variable##Muster} entfernt den größten Teil vom Inhalt der Variablen von links Entfernen non-greedy von rechts: ${Variable%Muster} entfernt den kleinsten Teil vom Inhalt der Variablen von rechts Entfernen greedy von rechts: ${Variable%%Muster} entfernt den größten Teil vom Inhalt der Variablen von rechts Bsp: Dateien umbenennen (Endung txt durch dat ersetzen): $ for f in *.txt; do mv $f ${f%txt}dat; done Programmierkurs für absolute Anfänger – Sitzung 14

Variablen- und Parameterersetzungen (2) erster Treffer von links wird ersetzt: ${Variable/Muster/Ersatz} alle Treffer werden ersetzt: ${Variable//Muster/Ersatz} Ersetzung nur wenn Muster am Anfang der Zeichenkette: ${Variable/#Muster/Ersatz} Ersetzung nur wenn Muster am Ende der Zeichenkette: ${Variable/%Muster/Ersatz} Beispiel: $ name="Anna.Lena.Meyer" $ echo ${name//./:} Programmierkurs für absolute Anfänger – Sitzung 14

Verzweigungen Syntax: if Bedingung1 then Befehl1 elif Bedingung2 then Befehl2 else Befehl3 fi elif- und else-Zweige sind optional elif-Konstrukte dürfen beliebig oft vorkommen nach then muss immer ein Befehl stehen – notfalls der Dummy-Befehl : Programmierkurs für absolute Anfänger – Sitzung 14

Tests (1) Ein Test prüft eine Bedingung und führt abhängig vom Ergebnis dieser Prüfung bestimmte Befehle aus. Syntax: [ Bedingung ] Tests für Zeichenketten Zahlen gleich: == bzw. = -eq ungleich: != -ne kleiner: < -lt kleiner gleich: <= -le größer: > -gt größer gleich: >= -ge komplexe Bedingungen: NICHT: ! Ausdruck UND: Ausdruck1 -a Ausdruck2 ODER: Ausdruck -o Ausdruck2 Programmierkurs für absolute Anfänger – Sitzung 14

Tests (2) Test für Dateien: wahr wenn Datei -e Datei existiert -s Datei existiert und nicht die Größe 0 hat -d Datei ein Verzeichnis ist -r Datei für den Benutzer lesbar ist -w Datei für den Benutzer schreibbar ist -x Datei für den Benutzer ausführbar ist Testen, ob das Skript mit zwei Argumenten aufgerufen wurde: if [ $# -eq 2 ] then ... else echo "Aufruf: ..." fi Programmierkurs für absolute Anfänger – Sitzung 14

Tests (3) Statt eines Tests können auch Befehle in die Bedingung geschrieben werden, z.B.: $ if ! ls | grep "pl$"; then echo "kein pl"; fi Variante: [[ Argument1 Vergleich Argument2 ]] Argument2 wird als Muster interpretiert: $ if [[ $dateiliste == *.tmp ]]; then ...; fi $ if [[ $dateiliste != *.tmp ]]; then ...; fi Programmierkurs für absolute Anfänger – Sitzung 14

Mehrfachverzweigungen: case Syntax: case Variable in Muster1 | Muster2 ... ) Befehle ;; Muster3 ) Befehle ;; *) Befehle esac for arg in $@ do case "$arg" in -*) ... *) ... esac done Programmierkurs für absolute Anfänger – Sitzung 14

while- und until-Schleife Syntax while-Schleife: while Test/Befehl do Befehle done Syntax until-Schleife: until Test/Befehl do Befehle done Wahrheitswerte: true ist immer wahr false ist immer falsch Endlosschleifen: $ while true; do ...; done $ until false; do ...; done Programmierkurs für absolute Anfänger – Sitzung 14

for-Schleife (1) Syntax: for Variable in Liste do Befehle done for i in 1 2 5 6; do echo $i; done Ausgabe aller Arrayelemente (auf separaten Zeilen): $ for i in ${zahlen[@]}; do echo $i; done Alle Postscriptdateien in einem Verzeichnis drucken: $ for d in *.ps; do echo $d; lpr $d; done Alle Perlskripte in einem Verzeichnis ausführen: $ for skript in *.pl; do perl $skript; done Programmierkurs für absolute Anfänger – Sitzung 14

for-Schleife (2) Syntax: for (( Ausdruck1 ; Ausdruck2; Ausdruck3 )) do Befehle done Beispiel: for (( i=30 ; i>=20 ; i--)) do echo $i done Programmierkurs für absolute Anfänger – Sitzung 14

was noch fehlt... Vorzeitiges Beenden: Kommentare: # Schleife vorzeitig beenden: break Skript vorzeitig beenden: exit Kommentare: # Programmierkurs für absolute Anfänger – Sitzung 14