• Keine Ergebnisse gefunden

Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm

N/A
N/A
Protected

Academic year: 2021

Aktie "Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm"

Copied!
138
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Linux

Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm

Hochschule Harz

FB Automatisierung und Informatik

mwilhelm@hs-harz.de

http://www.miwilhelm.de

Raum 2.202

Tel. 03943 / 659 338

(2)

Inhalt

1. Einführung, Literatur, Begriffe 2. Installation

3. Konsolen-Befehle, Shell, Manual

4. Komplexe Befehle (grep, find, tar, sed, cron, netcat) 5. C-Programmierung (C, IO, Thread, make)

6. Python (Sprache)

7. Python (GUI)

(3)

Verzeichnis:

Anmeldeverzeichnis Homeverzeichnis Pfadnamen:

absoluter Pfad Beginnend mit /user

relativer Pfad Beginnend mit ./image

Aktuelles Verzeichnis ./

Oberes Verzeichnis ../

Befehle:

cd change directory cd ~ change to home

pwd print working directory

Bewegen im Dateibaum

(4)

Verzeichnisbaum

/

bin boot dev etc home lib mnt proc root sbin tmp usr var

bin local include usr

lib init.d sysconfig

etc

httpd user1 user2 user2

home

user3

sbin src tmp man spool

(5)

/

Das Wurzelverzeichnis steht ganz oben in der Hierarchie.

/bin

Wichtige Programme für Anwender, die immer verfügbar sein müssen, z. B. die Shells.

/boot

Hier befinden sich die zum Hochfahren des Systems unbedingt erforderlichen Dateien (kernel mit dem Namen vmlinuz).

/dev

Dieses Verzeichnis enthält nur Spezialdateien, sogenannte Gerätedateien.

/dev/hda ist die erste Festplatte,

/dev/sda die erste SCSI-Festplatte im System.

/home

Verzeichnis der Benutzers

Verzeichnisse:

(6)

/lib

Hier befinden sich die wichtigsten Funktionsbibliotheken des Systems.

Grundregel: Finger weg!

/proc

/proc ist ein Systemverzeichnis. Speicherung von Programmstati.

/root

Dies ist das Hauptverzeichnis des Systemverwalters root.

/sbin

Enthält wie /bin wichtige Programme (ifconfig).

/tmp

Temporäres Verzeichnis. Damit sich Benutzer nicht gegenseitig ihre Dateien löschen, ist das sogenannte Sticky-Bit dieses Verzeichnisses gesetzt.

/usr

Verzeichnisstruktur der installierten Software. Die Programmdateien sind meist in /usr/bin, die Spiele in /usr/games.

Verzeichnisse:

(7)

/var

Unter diesem Verzeichnis werden hauptsächlich Dateien gespeichert, die sich ständig verändern. Der Name /var steht für variabel, also veränderlich. Hier befinden sich beispielsweise die Verzeichnisse für ausgehende E-Mail und noch ungelesene eingehende, wenn der jeweilige Benutzer nicht dafür gesorgt hat, dass neue E-Mails automatisch in sein Heimatverzeichnis übertragen werden.

/opt

(optionale Software) Kommerzielle Software oder sehr große Programme, die nicht unmittelbar zum System gehören, wie etwa KDE, Netscape, Mozilla usw.

finden hier ihren Platz.

/mnt /media

Hier werden die Laufwerke für den Zugriff angezeigt. Im Verzeichnis /dev sind sie nur sichtbar.

Verzeichnisse:

(8)

Wurzel des Dateibaumes ist das „Root“ (/)

Jeder Namen besteht aus 14 bzw. 255 Zeichen

Unterscheidung zwischen Groß- und Kleinschreibung

Es gibt nur einen Dateibaum

Es gibt keine Laufwerke

Festplatten sind in /dev eingetragen und werden mit dem mount-Befehl im Verzeichnis /mnt oder /media eingetragen

Dateibaum

Mount eines USB-Sticks mittels Namens:

Anlegen des USB-Verzeichnisses, mkdir /mnt/usb1

mount -t vfat /mnt/usb1 -L BUFF_E BUFF_E=Name

(9)

Logisches Dateisystem

Das Dateisystem unter Linux besitzt einen baumähnlichen Aufbau 5 Komponenten:

Normale Dateien: entspricht den üblichen Dateien

Gerätedateien: Verweise zu E/A-Geräten

Verzeichnisse: speichert Dateien und Verzeichnisse

Benannte Pipes Datentransfer zwischen Prozessen (FIFO)

Symbolische Links: Mehrere Verweise auf eine phys. Datei

Sockets: meist auf Servern

(10)

Syntaxdiagramm Kommando

Kommandoname

Parameter Trennzeichen

IFS Variable

• Kommando Leerzeichen optionale Parameter

(11)

Zugang: Befehl login

nach der Verbindungsaufnahme

login:

passwd:

Passwörter werden durch einen nichtöffentlichen Paßwortberechnungsalgorithmus verschlüsselt in /etc/passwd gespeichert

Änderung des Paßworts:

passwd

passwd user1

(12)

Neuer User:

Einloggen mit root

login:

passwd:

useradd user1

passwd user1

123456

123456

userdel –r user1 // -r löschen des Homeverzeichnisse

(13)

Benutzertypen

root

Hat alle Rechte

uid=0 gid=0

Systembenutzer

Ein spezieller Benutzer für Dienste.

Dieser Benutzer hat mehr Rechte, als ein normaler User, aber wenige als der root.

Standardbenutzer

Hat nur eingeschränkte Rechte.

Damit sollte man immer arbeiten.

(14)

User- Gruppenfunktionen: /etc/group

Es ergeben sich 9 Zugriffsrechte

Folgende User-Befehle stehen zur Verfügung

adduser Benutzer hinzufügen

deluser Benutzer löschen

usermod Benutzer ändern

grpadd hinzufügen einer Gruppe

chgrp change group

chmod change mode, Zugriffrechte

umask updatemask, Rechte für neue Dateien

chown change owner

(15)

Userfunktionen:chgrp

-c : zeigt die Dateien an, deren Gruppe geändert wird

-f : (force) es werden keine Fehlermeldungen ausgegeben -v: (verbose) alle Aktionen werden angezeigt, detailliert

-R: (recursive) die Gruppenzugehörigkeit der Dateien in den

Unterverzeichnissen wird ebenfalls geändert

(16)

Userfunktionen:chgrp

chgrp mygroup test.txt

Die Gruppe der 'test.txt' Datei ist root, ändern auf die neue Gruppe mygroup.

chgrp -R mygroup myDir

Die Gruppe des 'myDir' Verzeichnisses ist root. Mit -R wechseln die Dateien und Unterverzeichnisse auch zur neuenGruppe

mygroup

chgrp -c mygroup test.txt

Die Gruppe der 'test.txt' Datei ist root, ändern auf die neue Gruppe

(17)

Userfunktionen:groupadd

groupadd optionen groupname

-g : ID des Kontos. Werte zwischen 0 bis 99 sind Systemgruppen zugeordnet

Beispiel:

groupadd mygroup

(18)

Userfunktionen:groupdel und groupmod

groupdel groupname Beispiel:

groupdel mygroup

groupmod groupoldname groupnewname Beispiel:

groupmod mygroup mygruppe

(19)

Dateiattribute, Benutzerklassen, Zugriffsrechte

Jede Datei hat einen Eigentümer.

Anwender werden zu Gruppen zusammengefasst

Jeder Anwender hat eine UserIdentification (UID)

Jedes Objekt hat eine UID / GID / All

Jedes Objekt hat pro Benutzerklasse drei Zugriffsrechte

lesen read

schreiben write

ausführen execute

Owner Group World

rwx rwx rwx

(20)

Spezialbits

Setuid-Bit: s

Jede Datei hat einen Eigentümer.

Diese wird zur Laufzeit geändert

Zur Laufzeit erhält der User die Rechte der Datei (Bsp: root-Rechte)

Setgit-Bit: s

Anwender werden zu Gruppen zusammengefasst

Zur Laufzeit erhält der User die Usergit der Datei

Sticky-Bit: t

Mehrere Anwender haben Dateien in einem Verzeichnis und alle Rechte diese zu ändern (zum Beispiel /tmp).

Ist das Sticky-Bit gesetzt, kann jeder User nur seine eigenen Dateien löschen.

(21)

Dateiattribute

Zusätzlich zum Dateinamen sind noch eine Reihe weitere Eigenschaften von Dateien für die Verarbeitung durch Programme wichtig.

• Datei-Zugriffspfad

• Dateityp (normal, Verzeichnis, pipe, link oder device file)

• Zugriffsrechte

• Dateilänge (in Byte oder Blöcken zu 512 bzw 1024 Byte)

• Knotennummer (i-node number)

• Anzahl der Verknüpfungen mit dieser Datei

• Datum der Erstellung, der letzten Änderung, des letzten Zugriffs

• UID und GID des Besitzers, im Klartext falls möglich

ls -l listet alle diese Eigenschaften auf

(22)

Rechte Anz.

Links

Owner Group Size Datum device

drwxr-xr-x 10 root sys 4096 Apr 12 07:00 dev

drwxr-xr-x 16 root sys 8192 Apr 22 03:45 etc

drwxr-xr-x 9 root sys 136 Apr 21 05:00 home

drwxr-xr-x 2 root sys 0 Apr 22 12:19 hw

drwxr-xr-x 2 root sys 114 Mar 13 15:10 lib

drwxr-xr-x 2 root sys 69 Mar 13 15:10 lib32

drwxr-xr-x 2 root sys 36 Mar 13 15:10 lib64

drwxr-xr-x 5 root sys 60 Apr 21 03:47 linux

drwxr-xr-x 2 root sys 6 Apr 21 03:47 mp

drwxr-xr-x 1 root sys 21 Apr 12 07:00 ns

drwxr-xr-x 2 root sys 15 Mar 13 13:51 stand

drwxrwxrwt 3 sys sys 4096 Apr 22 12:17 tmp

-rwxr-xr-x 1 root sys 126116

56

Apr 3 06:30

unix

drwxr-xr-x 44 root sys 4096 Apr 12 07:00 usr

drwxr-xr-x 34 root sys 4096 Mar 13 15:37 var

(23)

Dateiverwaltungskommandos:

Unix Dos Beschreibung

cp copy Kopieren

mv ren move

ln link

rm del remove

mkdir md make directory

rmdir rmdir remove directory

pwd print working directory

cd „blank“ cd home

ls dir Liste aller Einträge

cat type Anzeige des Inhalts

lp print Drucken

(24)

ls Parameter

-1 eins, eine Spalte

-l kleines L, Longformat

-a all files, inkl. Hiddenfiles (Absturz vim)

-la kleines L, Longformat und Hiddenfiles

-lh kleines L, Longformat mit

-p / an den Verzeichnissen

-d / an den Verzeichnissen: ls -d */

-r Reihenfolge

-R Rekursiv

-s mit Dateigröße

-S sortiert nach Dateigröße

(25)

-f force

-i interactive, Nachfragen

-l erzeugt einen link, statt zu kopieren

-L erzeugt einen symbolischen link, statt zu kopieren

-n no überschreiben

-R -recursive

-r -recursive

-t target directory

-u -update, nur neuere Dateien kopieren

-v verbose, jede Aktion wird dokumentiert

cp Parameter

(26)

-f force

-i interactive, Nachfragen

-u -update, nur neuere Dateien kopieren

-v verbose, jede Aktion wird dokumentiert

mv Parameter

mv benutzt man zum Verschieben und/oder Umbenennen

mv a.sh b.sh umbennen

mv a.sh v1/ verschieben

mv a.sh v1/b.sh verschieben und umbennen

(27)

-f force

-i interactive, Nachfragen

-u -update, nur neuere Dateien kopieren

-v verbose, jede Aktion wird dokumentiert

rm Parameter

mv benutzt man zum Verschieben und/oder Umbenennen

mv a.sh b.sh umbennen

mv a.sh v1/ verschieben

mv a.sh v1/b.sh verschieben und umbennen

(28)

Gerätedateien kapseln die Unterschiede zwischen den Geräten.

Die Geräte werden durch logische Nummern angesprochen.

major device number minor device number

Liste der Abkürzungen:

Gerätedateien arbeiten block- oder zeichenorientiert

Befehl: ls -l /dev/mf0d ls -l -R /dev

• -b Blockorientiertes E/A-Gerät

• -c Character-E/A-Gerät

• -p FIFO-Datei (Named-Pipe)

• -l Symbolischen Link

• -s für Socket

(29)

Linux-Shells

Bourne Shell als Kommandointerpreter

Schnittstelle zwischen Benutzer und Betriebssystem

Alternative Shells

- C-Shell Thompson-Shell

- Korn Shell Job-Control-Shell

- Bourne-Shell Bash Shell

- Debian-Almquist-Shell TENEX-C-Shell

- easy-Shell fish-Shell (friendly interactive Shell) - Almquist-Shell

- Z-Shell: http://www.pro-linux.de/artikel/2/1186

Start nach dem Login Kommando

Nach dem Login wird die Datei /etc/profile ausgeführt

Ausgabe Reportdatei /etc/motd

Start von Programmen (mail etc.);

Verzweigung in das Home-Verzeichnis

Benutzereigene Ini-Datei .profile

(30)

Konsole vs. Shells

Kommandos werden in einem Konsolenfenster eingegeben

Die Kommandos werden dann von einer Shell ausgewertet

Einige Kommandos in den Shells implementiert.

Diese Kommandos heißen auch interne Shellbefehle.

Der Grund ist bessere Performance.

(31)

cat /etc/shells: chsh -s /bin/zsh

(32)

Z-Shell

Automatisches beheben von Tippfehlern

tets.txt nach test.txt

Globale Alias

alias -g G='| grep' Definition

alias -g L='| less‚

ls G txt Benutzung

ls G txt L

Suffix-Aliase

Die Endung bestimmt das verknüpfte Programm

alias -s pdf=evince Ext: pdf, Programm: evince

Auto-CD

Mit autocd wechselt man das Verzeichnis ohne den „cd“

for i in *.eps; do epstopdf $i; done Alte Variante

for i (*.eps) epstopdf $i zShell

Globale History

(33)

Shell

Shell-Programme

• Alle Shell-Programme sind in /bin gespeichert Liste aller Shells

• cat /etc/shells

Änderung der Standard-Shell

• Kommando chsh:

• chsh /bin/csh

(34)

Liste aller Shells unter cygwin

(35)

Eingabe Prompt: PS2 bei mehrzeiliger Eingabe

Mit den Variablen PS1 und PS2 kann man das Aussehen auf der Console bestimmen:

PS1="\w: " à la pwd

PS1="\a\d $ " char(7) und Datum

PS1="\u: \s $ " root/user und shellname

\a Warnton

\d Datum

\h Hostname

\j Anzahl der Jobs

\n Zeilenumbruch

\s Name der aktuellen Shell

\t Aktuelle Zeit

\u User

\v Version der Shell

\$ Standardprompt

(36)

Ein- und Ausgabeumlenkung

Aufgabe:

Bestimmung der Anzahl der Dateien in einem Verzeichnis Bestimmen der Anzahl der Buchstaben aller Dateinamen Kommando: ls

ls

1.Dat fkt if mathe rekur case fminmax korn1 neg shell_proz cd folgezeichen

korn2 oder1 sort cd1 for liste oder2 t

cd2 grep loop read

(37)

Ein- und Ausgabeumlenkung

Aufgabe:

Kommando wc zählt die Zeichen / Wörter / Zeilen

Bestimmung der Anzahl der Dateien in einem Verzeichnis Kommando:

ls > liste Speichern der Ergebnisse in eine Datei wc < liste Aufruf des Befehls; Eingabe durch die

Datei „liste“

ls > liste wc < liste

25 25 138

25 Zeilen 25 Wörter 138 Zeichen

Ein- und Ausgabeumlenkung

(38)

Ein- und Ausgabeumlenkung

Aufgabe:

Bestimmung der Anzahl der Dateien in einem Verzeichnis Kommando als Pipe

ls | wc

ls -l | wc –c –l -w

26 227 1522

26 Zeilen 227 Wörter 1522 Zeichen

Ein- und Ausgabeumlenkung

(39)

Ein- und Ausgabeumlenkung

Beispiel:

Datei1:

Informatik ist toll

Elektrotechnik ebenso

Ein- und Ausgabeumlenkung

Datei2:

Acht ist kleiner Neun.

Siebzehn ist eine Primzahl

Befehl:

cat datei2 datei1 > datei3 // datei3 erzeugt + kopiert

cat datei2 datei1 >> datei3 // datei3 bleibt + anhängen

(40)

Ein- und Ausgabeumlenkung

Beispiel:

Der Befehl „who“ listet alle aktuell angemeldeten Benutzer who > user

wc -l user rm user

Ein- und Ausgabeumlenkung

who | wc -l // das ist ein kleines L

(41)

Standarddateien für Prozesse

Jedem Prozess sind Standarddateien zugeordnet

Standard- eingabe

Standard- fehlerausgabe

Standard- ausgabe

Prozess

0 = Standardeingabe 1 = Standardausgabe 2 = Fehlerausgabe

(42)

Standarddateien in Kommandos

Kommandos werden mittels Semikolon aneinandergereiht

Kommandos werden durch Sonderzeichen zur Festlegung der Standarddateien beendet (<, >, <<, >>, |)

kommando < infile > outfile 2>errorfile

ls -l > listing

ls -l /bin >> listing

wc -l < listing

> listing wc -l

cat /etc/passwd > passwd // Keine Anzeige

cat /etc/passwd > passwd 2>/dev/null

sort Datei_1 >Datei_1

cat 222 > erg222 2>fehler

(43)

Shell Sonderzeichen

Das Semikolon trennt Kommandos

Das Ampersand-Zeichen „&“ startet das Kommandos als Hintergrundprozess

Promptstring: $

Weitere Eingabe: >

Abbruch mit Strg+C

Suchpfad: path=/usr/local/bin/commands

Stringbegrenzer " und `

Folgezeichen: \ in einer Scriptdatei

(44)

Namensexpandierung (Wildcard)

In einem Kommando wird ein Wort das die

Zeichen *,? oder [..] enthält, als Namensmuster betrachtet und vor der Verwendung expandiert.

Dabei bedeuten:

* = eine beliebige Zeichenkette, auch nichts

? = ein beliebiges Zeichen, nicht nichts !

[...] = ein Satz einzelner Zeichen

- = ein Bereich von Zeichen

! = benutzt in einer Gruppe. Wird als erstes Zeichen

(45)

Beispiele für Wildcards

Das aktuelle Verzeichnis enthalte prog1, Prog1, p1.1, p1.2, p1.3, p1.4, p1.5 und p1.6, p1.66, p1

Namensmuster Dateien

prog* prog1

p??? p1.1, p1.2, p1.3, p1.4, p1.5, p1.6

*2* p1.2

p1.[136] p1.1, p1.3, p1.6

p1.[1-36] p1.1, p1.2, p1.3, p1.6 p1.[!1-36] p1.4, p1.5

../* Dateien oberhalb des aktuellen Verzeichnisses

./* prog1, p1.1, p1.2, p1.3, p1.4, p1.5 und p1.6

(46)

List-Kommando mit Wildcards

Dateien im Verzeichnis:

basis.c

bsp1

main.c

oder2

Befehl: ls b*

basis.c

bsp1 Befehl: ls b*.*

basis.c

Befehl: ls *.c

basis.c Befehle: ls b*

ls b*.*

(47)

Beispiele:

Alias Zuweisen von Zeichenketten an einem neuen Befehl

alias dir='ls –p'

alias ..='cd ..'

alias cd..='cd ..'

(48)

Beispiele:

cat Inhalt anzeigen von Dateien

-n mit Nummer am Anfang

-v Sonderzeichnen als ^X....

-e Ausgabe des Dollarzeichens am Ende jeder Zeile (mit -v)

-t Tabs als ^T, Formfeed als ^L

(49)

Beispiele:

who Anzeige der aktuellen Benutzer

-H mit Kopfzeile

-m Liste aller Benutzer, bezogen auf das aktuelle Terminal

-b Letzter Bootvorgang

su Neue Session mit anderem Account aufmachen

su root

sudo Befehl als root ausführen (ubuntu).

useradd Anlegen eines neuen Useraccounts

userdel Löschen eines Users.

usermod Ändern eines bestehenden Useraccounts.

(50)

Beispiele:

ps Anzeige der aktuellen Prozesse

-a Liste aller terminalabhängigen Prozesse, Vaterprozess

-A Liste aller Prozesse

-c Liste mit Priotitäten

-f Liste mit allen Informationen

-j Ausgabe mit PID und Group-ID

whoami Anzeige der aktuellen Benutzer

pwd Print working directory

(51)

Beispiele:

cat test.dat | more Seitenweise Anzeige des Inhalts

cat test.dat | less Seitenweise Anzeige des Inhalts, nach oben

whereis Suchen einer Datei, durchsucht Standardverzeichnisse

which Sucht einen Befehl im Path

type Sucht im Path, Alias und auch alle Shell-Befehle

stat test.dat Ausgabe wesentlicher Daten

touch test.dat Anlegen einer leeren Datei

head test.dat Anzeige der ersten zehn Zeilen oder bel.

tail test.dat Anzeige der letzten zehn Zeilen oder bel.

(52)

shutdown -r now neu starten

shutdown -h now runterfahren

clear löschen Bildschirm

alias

alias ll 'ls -l'

alias dir 'ls'

chgrp Gruppenzugehörigkeit einer Datei ändern

chmod Zugriffsrechte ändern

Beispiele:

(53)

touch Datum / Zeit einer Datei ändern

ifconfig Anzeige der Konfiguration Netzwerk in /sbin zu finden

ifconfig eth0 193.168.34.177 netmask 255.255.255.224

netstat Info über Netzverbindungen

ping test auf Verbindung

chown Eigentümer einer Datei ändern

groupadd Anlegen einer neuen User-Gruppe

groupdel Löschen einer bestehenden User-Gruppe

groupmod Ändern der Daten einer bestehenden User-Gruppe

groups Zeigt die Gruppenzugehörigkeit eines Users

Beispiele:

(54)

Beispiele:

df Anzeige des freien Speichers (Disk free)

Filesystem Type blocks use avail %use Mounted on

/dev/root xfs 13053888 4759811 8294077 37 /

/dev/dsk/dks0d3s7 xfs 35549344 4359272 31190072 13 /bscw /dev/dsk/dks0d7s7 xfs 17761224 4165784 13595440 24 /linux

/dev/dsk/dks0d4s7 xfs 4183704 1216 4182488 1 /mp

/dev/dsk/dks0d2s7 xfs 4183704 660752 3522952 16 /opt 194.95.16.234:/home nfs 1989581056 1729751984 259829072 87 /home

(55)

Beispiele:

du Anzeige des benutzten Speichers (Disk used)

-k Anzeige in K-Byte

-a Anzeige als Liste mit allen Dateien

-s Es wird nur eine Summe pro Teilbaum ausgegeben

sort Sortieren einer Datei (aufsteigend)

-r Umgekehrte Reihenfolge (absteigend)

-n Numerisches Sortieren

-u Eindeutige Ergebnisse

(56)

Beispiele:

chmod Änderung des Zugriffs einer Datei(en)

nnn Hexadezimale Beschreibung (User, Group, Other, RWX)

go+r Setzen zum Lesen (g,u,o)

u+x Setzen als Ausführbare Datei

a Für alle Gruppen

r reading permission

w writing permission

x execution permission

X execution permission (see below)

s user or group set-ID is turned on

(57)

for nr in 1 2 3 4 5 6 7 8 9 do

adduser u$nr passwd u$nr < p done

for (( i=1; i<10; i++)) do

adduser u$i passwd u$i < p done

In Datei p steht das Passwort:

student student

Userfunktionen: adduser

(58)

Variablen und Parameter

Im Umgang mit Variablen der Shell sind einige Besonderheiten

gegenüber anderen Programmiersprachen zu beachten. Es lassen sich grundlegend drei Formen unterscheiden:

- Variablendeklaration - Wertzuweisung

- Wertreferenzierung (Zugriff auf den Wert einer Variablen)

Zur Verdeutlichung des Sachverhaltes sollen wenige Beispiele dienen:

Form Beispiel Bildausgabe

(59)

Prozesskommandos ps process status

kill process löschen

nice Priorität des Befehls ändern

nohup Kommando kann durch die Signale

− 1: Beenden der Verbindung

− 2: Interrupt-Signal (Del)

− 3: Quit-Signal (<Strg><\>

− 15: kill Befehl

sleep warten

sleep 13

(60)

Befehl prozess ps

• Der Befehl ps listet alle vorhandenen Prozesse auf

ps -A

PID TTY TIME CMD

1 ? 0:28 init

78 ? 0:26 syslogd 187 ? 3:53 ilmid 271 ? 1:47 nsd

272 ? 0:00 rpcbind

(61)

Hintergrundprozesse

• Jedes Kommando wird als Vordergrundprozess ausgeführt.

• Der Vaterprozess wird unterbrochen (synchrone Ausführung)

• Eine asynchrone Ausführung (Hintergrundprozess) erreicht man durch Anhängen eines Ambersand-Zeichen an den Befehl

• Beispiel:

• cd / cd /

• ls -R ls& -R

(62)

Prozesspriorität

Linux verwaltet die Rechenzeit bzgl. der Prozesse im Timesharing Verfahren

Prozess 1

Umschaltung

Prozess 2 P 1 Prozess 3 Prozess 1

(63)

Prozesspriorität

Grundprioritäten der Prozesse:

Schedulerprozess 70-100 Systembereich 30-70

Anwender 0-30

Priorität = f(Grundpriorität, passive Zeit, nice-Wert) Beispiel:

nice -40 cc test.c

(64)

Beispiel:

Paul=

Paul=Otto echo Paul echo paul echo Otto echo otto echo $Paul

Deklaration Wertzuweisung Ausgabe Paul Ausgabe paul Ausgabe Otto Ausgabe otto

Ausgabe des Inhalts von Paul Otto

my=Bash my=Bash

(65)

Gültigkeitsdauer von Variablen

$lage=oben Variable lage wird deklariert mit oben

$echo $lage Wert der Variablen wird referenziert oben Wert der Variablen auf dem Bildschirm

$ bash Aufruf einer Sub-Shell

$ echo $lage Wert der Variablen wird referenziert

Variable lage ist in der Sub-Shell nicht bekannt

$ lage=unten lage wird ein neuer Wert zugewiesen

$ echo $lage Wert der Variablen erneut referenziert unten neuer Wert auf dem Bildschirm

$ exit Abmelden von der Sub-Shell, damit ist die alte Shell aktiv

$ echo $lage erneut wird der Wert referenziert oben der erste Wert ist erhalten geblieben

(66)

Gültigkeitsdauer von Variablen

$lage=oben Variable lage wird deklariert mit oben

$echo $lage Wert der Variablen wird referenziert oben Wert der Variablen auf dem Bildschirm

$ export lage die Variable lage wird exportiert

$ bash Aufruf einer Sub-Shell

$ echo $lage Wert der Variablen wird referenziert

Variable lage ist in der Sub-Shell nicht bekannt

oben durch den Export der Variablen an die Sub-Shell übergeben

$ lage=unten lage wird ein neuer Wert zugewiesen

$ echo $lage Wert der Variablen erneut referenziert unten neuer Wert auf dem Bildschirm

$ exit Abmelden von der Sub-Shell, damit ist die alte Shell aktiv

(67)

Umgebungsvariablen einer Shell

Variable Bedeutung typischer Wert

HOME Home-Directory des Benutzers /home/otto PATH Anzahl von Directories zur

Kommandosuche

/bin:/usr/bin:/etc CDPATH Anzahl von Directories für das

Kommando cd

~/verz1:~/labor PS1 1. Promptzeichen $ oder # "$\PWD> "

PS2 2. Promptzeichen > "weiter> "

MAIL Pfad zum elektronischen Briefkasten /usr/spool/mail/otto IFS Separatorzeichen für Kommandozeile TAB, NL,

Leerzeichen

TZ Zeitzone MEZ-

1MESZ,3.2.0,9.2.0 SHELL Pfadname der aktiven Shell /bin/bash

RANDOM Anzeige einer Zufallszahl 0 bis 32767

(68)

Positionsparameter als Variable

Positionsparameter Bedeutung

$# Anzahl der Argumente ohne

kommandoname

$0 Name des Kommandos

(kommandoname)

$1 1. Argument nach dem

Kommandoname

: :

$9 9. Argument nach dem

Kommandoname

$@ alle Argumente ohne Kommandoname

$* alle Argumente ohne Kommandoname

(69)

Shellskript shell_proz

echo "Mein Name ist $0"

echo "Mir wurden $# Parameter übergeben"

echo "1. Parameter = $1"

echo "2. Parameter = $2"

echo "3. Parameter = $3"

echo "Alle Parameter zusammen:

$*"

echo "Meine Prozessnummer PID = $$"

Anzeige mit 1,2,3,4 und 5 Parametern ?!

(70)

Testlauf

Das Shell-Skript ausführbar machen

$ chmod u+x meineShelldatei.sh

Das Shell-Skript erzeugt die folgenden Ausgaben auf dem Bildschirm:

$ meineShelldatei.sh emil erna paul fred otto Mein Name ist meineShelldatei.sh

Mir wurden 5 Parameter übergeben 1. Parameter = emil

2. Parameter = erna 3. Parameter = paul

Alle Parameter zusammen:

(71)

Aufgabe:

Erstellen Sie ein Script, welches den ersten Parameter dazu verwendet, in ein Verzeichnis zu wechseln.

Existiert das Verzeichnis nicht, so soll dieses mit einer eventuellen Fehlermeldung angelegt werden.

Lösung ohne Fehlerumleitung:

cd $1 || mkdir $1 && cd $1 || echo fehler pwd

Lösung mit Fehlerumleitung:

cd $1 2>error || mkdir $1 2>error && cd $1 2>error || echo fehler

pwd

(72)

Apostrophierung:

echo guten morgen

echo eins zwei drei echo * wie gehts? *

echo '* wie gehts? *'

echo 'Pfadvariable: $PATH'

echo "Pfadvariable: $PATH, UID: $uid, GID: $gid"

(73)

IFS und die Apostrophierung:

Diese Variable bestimmt die Trennung der Parameter

IFS definiert die möglichen Trennzeichen

echo IFS Variable IFS wird ausgewertet

echo "IFS" Inhalt angezeigt, nur Variablenersetzung IFS= %:,

IFS=“_%:," Korrekte Definition: (Blank % ,) e1="1111 3333 5555"

echo $e1 ⇒ 1111 3333 5555

IFS=",%:" Trennzeichendefinition

echo $e1 ⇒ 1111 3333 5555

(74)

IFS und Beispiele:

IFS=“ %:“ neue Trennzeichendefinition e1="1111,,,,,,,,,3333,,,,,,,,5555"

echo $e1 ⇒ 1111,,,,,,,,,3333,,,,,,,,5555 IFS=“,%:“ neue Trennzeichendefinition

echo $e1 ⇒ 1111 3333 5555

Alle Zeichen in „e1“, die in IFS enthalten sind, werden

(75)

Ausgabe mit echo:

Zusätzliche Sonderzeichen:

Darstellung ASCII-Code Bedeutung

\a 7 Piepston

\b 8 Backspace

\c ? Ausgabe beenden ((Bash), Kornshell)

\f 12 Form Feed (Neue Seite)

\n 10 Zeilenvorschub

\r 13 Carriage Return (Wagenrücklauf)

\t 9 Tabulator

\v 11 Vertikaltabulator

\\ 92 Backslash

\0xxx xxx Zeichen mit ASCII-Code

(76)

Ausgabe mit echo:

text = 'DOS-Verzeichnis: \alpha\beta\gamma‘

Kornshell:

echo "$text“

⇒ DOS-Verzeichnis: lpheta\gamma

Bash (-e ausführen der Sonderzeichen) echo -e "$text“ // bash

⇒ DOS-Verzeichnis: lpheta\gamma

echo '$text‘ oder echo $text

(77)

Shell Sonderzeichen

Kommentar: #

print "Guten Morgen" # Kommentar

print # "Guten Morgen" # Kommentar

Folgezeile: \

print Dieses Komman\

do ist über meh\

rere Zeilen verteilt

Start: Strg+q

Start / Stop Strg+s

Shellende Strg+d

(78)

Prozesse beenden

Mit dem Kommando kill kann man das Signal (Strg D) zum Abbrechen einem Prozess

übermitteln.

Da nicht alle Programm darauf reagieren signalisiert kill -9 PID die absolute

Aufforderung zum Beenden an einen eigenen Prozess.

-9 = SIGKILL

(79)

Einlesen mit read:

Zum Einlesen in Variablen wird die Anweisung read benutzt:

read xx

Mit der Eingabe 1111

read xx yy zz Mit der Eingabe

1111 2222 3333 4444

xx: ?

yy: ?

-n Kein Zeilenumbruch

zz ?

-t Ersetzen Sonderzeichen

(80)

Einlesen mit read:

Ausgabe eines Zusatztextes:

echo Eingabe read xx

echo -n Eingabe // Kein Zeilenumbruch read xx

echo -n "Eingabe: " // Kein Zeilenumbruch

read xx

(81)

Kommandoersetzung:

Kombination aus Umleitung und Variablenersetzung:

liste=$(ls) // Inhalt des Verzeichnisses in liste zeit=$(date)

z1=$(grep freundlich verkauf)

z2=$(grep freundlich verkauf | sort)

dateien=$(ls *.java)

(82)

Alphabetische Vergleiche:

Abfrage

if [[ abc < abs ]]

if [ [ abc > abcd ]]

if [ [ 123 < 147 ] ] if [ [ 123 < 0147 ] ] if [ [ 0815 > 3 ] ] if [ [ 12345 <77 ] ]

wahr / falsch

# wahr

# falsch

# wahr

# falsch

# falsch

# wahr

(83)

Alphabetische Vergleiche:

Abfrage wahr / falsch

if [ abc < abs ] # wahr

if [ abc > abcd ] # falsch

if [ 123 < 147 ] # wahr

if [ 123 < 0147 ] # falsch

if [ 0815 > 3 ] # falsch

if [ 12345 <77 ] # wahr

if [ püh < pöh ] # falsch

(84)

Arithmetische Vergleiche:

Abfrage Bedeutung

$x -lt $y x ist kleiner als y

$x -le $y x ist kleiner oder gleich als y

$x -eq $y x ist gleich als y

$x -ne $y x ist ungleich als y

$x -gt $y x ist größer als y

$x -ge $y x ist größer oder gleich als y Beispiel:

if [ $x -lt $y ] then

(85)

Kontrollstrukturen:

Bedingte und einfache Fallunterscheidungen

if bedingung then

kommando_1a kommando_1b kommando_1c else

kommando_2a kommando_2b fi

if bedingung then

kommando_1 else

kommando_2

fi

(86)

Arithmetische Vergleiche:

T1=23 T2=44

if [ $T1 -lt $T2 ] then

echo true else

echo false fi

Ausgabe: true

T1=23 T2=44 T3=45

if [ $T1 -gt $T2 ] then

echo 1

elif [ $T3 –gt $t2 ] then

echo T3 else

echo T2 fi

fi

(87)

Beispiele Bash:

typeset [-afFirtx] [-p] name[=value]

declare [-afFirtx] [-p] name[=value]

typeset -i k # Integervariable k

typeset -i k m n # Integervariable k, m, n

-a # Explizite Definition eines Arrays

-f # Use function name only

-r # Variablen sind readonly

-t # Erhält trace-Attribut (Debug)

-x # Export

-p # Anzeige aller Variablen und Namen -F # Verhindert die Anzeige der Funktions-

definitionen

(88)

Dateieigenschaften prüfen

if [ ausdruck datei ]

ausdruck Bedeutung

-a <datei> datei existiert

-b <datei> datei existiert und ist blockorientiertes Gerät -c <datei> datei existiert und ist zeichenorientiertes Gerät -d <datei> datei existiert und ist Verzeichnis

-e <datei> datei existiert

-f <datei> datei existiert und ist einfache Datei

-g <datei> datei existiert und für Gruppe s-Bit gesetzt

-h <datei> datei existiert und ist eine symbolische Linkdatei -k <datei> datei existiert und das sticky-Bit ist gesetzt

-p <datei> datei existiert und ist ein pipe (FIFO)

(89)

Dateieigenschaften prüfen

if [ ausdruck datei ]

ausdruck Bedeutung

-r <datei> datei existiert und Leserecht -s <datei> datei existiert und ist nicht leer

-u <datei> datei existiert und für Eigentümer s-Bit gesetzt -w <datei> datei existiert und hat Schreibrecht

-x <datei> datei existiert und hat Ausführungsrecht

-O <datei> datei existiert und Eigentümer User -G <datei> datei existiert und Eigentümer Group -L <datei> datei existiert und ist symbolischer Link -S <datei> datei existiert und ist Socket

-N <datei> datei existiert und wurde nach dem letzten Lesen

geändert

(90)

Dateieigenschaften prüfen

if [ ausdruck datei ]

ausdruck Bedeutung

-d <datei> datei existiert und ist Verzeichnis -f <datei> datei existiert und ist einfache Datei

-h <datei> datei existiert und ist eine symbolische Linkdatei

(91)

Dateieigenschaften prüfen

if [ ausdruck datei ]

ausdruck Bedeutung

-r <datei> datei existiert und Leserecht -s <datei> datei existiert und ist nicht leer

-u <datei> datei existiert und für Eigentümer s-Bit gesetzt -w <datei> datei existiert und hat Schreibrecht

-x <datei> datei existiert und hat Ausführungsrecht

-O <datei> datei existiert und Eigentümer User -G <datei> datei existiert und Eigentümer Group -L <datei> datei existiert und ist symbolischer Link -S <datei> datei existiert und ist Socket

-N <datei> datei existiert und wurde nach dem letzten Lesen

geändert

(92)

Dateiabfragen:

datei1 -nt datei2 datei1 ist neuer als datei2 datei1 -ot datei2 datei1 ist älter als datei2 datei1 -ef datei2 datei1, datei2 Links auf

dieselbe Datei

-z string string ist leer (zero)

-n string string ist nicht leer

Beispiel: if [ -n "$sStr" ]

then

(93)

Bedingte und einfache Fallunterscheidungen

Beispiele:

If [ -d $1 ] then

echo $1 ist ein Verzeichnis else

echo $1 ist kein Verzeichnis

fi

(94)

Logische Verknüpfungen mit UND und ODER

UND (&&):

Kommandofolgen werden von links beginnend abgearbeitet, solange der „Exitstatus 0“ liefert.

ODER (||):

Kommandofolgen werden von links beginnend abgearbeitet, bis

ein Kommando als „Exitstatus 0“ liefert.

(95)

Beispiele:

$ who | grep guest && write guest < nachricht

• who gibt alle angemeldeten User nach grep

• Wenn guest vorhanden, dann erhält guest eine Nachricht.

(who | grep $1) || (who | grep $2) && echo "$1 oder $2 ist da“

• who gibt alle angemeldeten User nach grep

• Wenn 1. oder 2. Parameter vorhanden, dann Ausgabe.

(who | grep meier) || (who | grep schmidt) && write schulz <

nachricht

• who gibt alle angemeldeten User nach grep

• Wenn meier oder schmidt vorhanden, dann Nachricht an schmidt.

⇒ Wahrheitstabellen

(96)

Wahrheitstabellen

$ who | grep guest && write guest < nachricht

Anwesende

User

Kommando1 UND Kommando2

guest Result = 0

⇒ ok

Result = 0 ⇒ ok Kommando wird ausgeführt:

Result = 0 ⇒ ok Kein guest Result = 1

⇒ false

Result ≠ 0 ⇒ nichtok Kommando wird nicht ausgeführt:

Result ≠ 0 ⇒ nichtok

(97)

Wahrheitstabellen

(who | grep meier) || (who | grep schmidt) && echo “ schmidtmeier"

User Kommando1 Kommando2 Klammerausdruck UND

meier Result = 0 ⇒ ok Wird nicht gestartet Result = 0 ⇒ ok

Echo wird ausgeführt meier

schmidt

Result = 0 ⇒ ok Wird nicht gestartet Result = 0 ⇒ ok

Echo wird ausgeführt schmidt Result ≠ 0 ⇒ nichtok Result = 0 ⇒ ok Result = 0 ⇒ ok

Echo wird ausgeführt Keiner

von beiden

Result ≠ 0 ⇒ nichtok Result ≠ 0 ⇒ nichtok Result ≠ 0 ⇒ nichtok Echo wird nicht

ausgeführt

Frage: Welche User sind wann angemeldet?

(98)

Wahrheitstabellen

(who | grep meier) || (who | grep schmidt) && echo “ schmidtmeier"

User Kommando1 Kommando2 Klammerausdruck ODER

? Result = 0 ⇒ ok Wird nicht gestartet Result = 0 ⇒ ok

Echo wird ausgeführt

? Result = 0 ⇒ ok Wird nicht gestartet Result = 0 ⇒ ok

Echo wird ausgeführt

? Result ≠ 0 ⇒ nichtok Result = 0 ⇒ ok Result = 0 ⇒ ok

Echo wird ausgeführt

? Result ≠ 0 ⇒ nichtok Result ≠ 0 ⇒ nichtok Result ≠ 0 ⇒ nichtok Echo wird nicht

ausgeführt

(99)

Wahrheitstabellen

(who | grep meier) || (who | grep schmidt) || echo “ schmidt und meier"

Welche User sind wann angemeldet und welche Kommandos werden gestartet?

User Kommando1 Kommando2 Komanndo3 ODER

Result = 0 ⇒ ok Wird nicht gestartet Result = 0 ⇒ ok Wird nicht gestartet Result ≠ 0 ⇒ nichtok Result = 0 ⇒ ok

Result ≠ 0 ⇒ nichtok Result ≠ 0 ⇒ nichtok

(100)

Wahrheitstabellen

(who | grep meier) || (who | grep schmidt) || echo “ schmidt und meier"

User Kommando1 Kommando2 Komanndo3 ODER

meier Result = 0 ⇒ ok Wird nicht gestartet Wird nicht gestartet meier

schmidt

Result = 0 ⇒ ok Wird nicht gestartet Wird nicht gestartet schmidt Result ≠ 0 ⇒ nichtok Result = 0 ⇒ ok Wird nicht gestartet Keiner

von beiden

Result ≠ 0 ⇒ nichtok Result ≠ 0 ⇒ nichtok Wird gestartet

(101)

Arithmetik :

Anweisungen werden ohne Leerzeichen eingeben:

typeset -i a b sum a=1

b=2

sum=a+b echo $sum

a=2 b=3

sum=`expr $a + $b`

echo $sum

(102)

Arithmetik:

Anweisungen mit Dollar-Klammer:

a=1 b=2

sum=$[ 1 + ( a + b ) * ( a - b ) ] echo $sum

Anweisungen mit Dollar-Klammer:

a=1

b=2

(103)

Arithmetik:

Anweisungen mit der Klammer (( )) : a=1

b=2

(( sum= 1 + ( a + b ) * ( a - b ) )) echo $sum

Fehlerhafte Eingabe:

a = 1 b = 2

(( sum= 1 + ( a + b ) * ( a - b ) ))

echo $sum

(104)

Arithmetik:

Operatoren:

+ Addition

− Substraktion

* Multiplikation

/ Ganzzahlige Division

% Modulo

+= Addition

− = Substraktion

*= Multiplikation

/= Ganzzahlige Division

%= Modulo

(105)

Zählschleife:

Es wird der Zählschleife eine Menge von Werten

übergeben. Bei jedem Durchlauf wird einer Variablen der nächste Wert aus der Menge von Werten

übergeben.

Die Anzahl von Durchläufen ist an die Menge von übergebenen Werten gebunden

Break und Continue ändern die Abarbeitung

for name in wert_1 wert_2 wert_3 wert_4 do

kommandoliste

done

(106)

Beispiele einer Zählschleife:

Wenn der Positionsparameter $* bzw. alle Parameter verwendet werden soll, wird die Zählschleife wie folgt notiert:

for name in $*

do

kommandoliste done

Feste Schleifenanzahl:

for i in 1 2 3 4 5 6 do

for (( i=1; i<10; i++ )) do

echo $i done

for i in {1,4,5,6,7,11}

for i in {1..5}

(107)

Beispiele einer Zählschleife:

Dateien Schleife:

liste=$(ls *.c) for datei in $liste do

echo $datei done

Feste Schleifenanzahl:

for i in 1 2 3 4 5 6 do

if [ $i -eq 4 ] then

break fi

echo "Hallo"

done

Break und Continue ändern die Abarbeitung

(108)

Whileschleife:

Schleife mit Eingangsbedingung:

while [ Bed ] do

kommandoliste done

Break und Continue ändern die Abarbeitung

(109)

Beispiele einer Whileschleife:

i=1

while [ $i -lt 10 ] do

echo $i done

i=1

while [ $i -lt 10 ] do

echo $i

i=`expr $i \+ 1 ` done

i=1

while [ $i -lt 10 ] do

echo $i i=$i+1 done

i=1

while [ $i -lt 10 ] do

echo $i

i=i+1

done

(110)

Array

Es gibt einfache Felder und Hashmaps

Notation:

x=() leeres Feld

x[0]='a'

x[1]='b'

x=('a' 'b' 'c')

echo ${x[1]}

echo ${x[@]} alle Elemente

(111)

HashMap

Notation:

declare –a y leeres HashMap

declare –A y leeres HashMap

y[abc]=123

y[efg]=xxx

y=([abc]=123 [efg]=xxx )

echo ${y[abc]}

y['abc']=1234

echo ${y['abc']}

echo ${y[@]} alle Elemente

(112)

Case / Switch Anweisung:

Statt verschachtelter if-Anweisungen erlaubt die Case-Anweisung eine übersichtlichere

Programmierung:

case Bed in

(muster1) kommandoliste

;;

(muster2) kommandoliste

;;

(113)

1. Beispiel einer Case Anweisung:

prompt = $*

echo -n "$prompt (ja/nein): "

read antwort

case $antwort in ([jJ]) echo ja

exit 0

;;

([nN]) echo nein exit 1

;;

(*) echo rest exit 2 esac

Aufruf mit

bash case2 Wollen..

(114)

1. Beispiel einer Case Anweisung:

prompt = $*

echo -e "$prompt (ja/nein): "

read antwort

case $antwort in j|J) echo ja

exit 0

;;

n|N) echo nein exit 1

;;

Aufruf mit

bash case2 Wollen..

(115)

2. Beispiel einer Case Anweisung:

Aufgabe:

Einen Script soll ein einfacher Name übergeben werden.

name=$1

case $name in

(*/*) echo "$name ist kein einfacher Name"

exit 1;;

(' ' ) echo "$name ist kein einfacher Name"

exit 1;;

esac

(116)

3. Beispiel einer Case Anweisung:

Einen Script soll ein einfacher Name übergeben werden, optional als 1. Parameter ein Schalter -n

s1=-n

case $1 in # 1. parameter

($s1) schalter=S1 name=$2

;;

(* ) name=$1 esac

case $name in

(*/*) print -u2 "$name ist kein einfacher Name"

exit 1;;

(117)

4. Beispiel einer Case Anweisung:

Bestimmung der Anzahl der Tage eines Monats read monat

case $monat in (1|3|5|7|8|10|12)

maxtage=31 ;;

(* )

maxtage=0;;

esac

echo “Anzahl der Tage ist $maxtage"

(118)

Funktionen:

Funktionen dienen dazu, Befehle unter einem Namen zusammenzufassen.

• Speicherung innerhalb eines Scriptes

• Schneller Aufruf

• Verwendung der Scriptparameter

• Verwendung der lokalen Variablen

• In der Shell definierte Funktionen können aufgerufen werden

Aufbau:

function name

{

(119)

function list {

ls -aF }

# mainprogram ls > dat1

list

Beispiele für Funktionen

function readname {

echo -n "Bitte einen Namen eingeben:"

read name }

# mainprogram

readname

(120)

Beispiele für Funktionen: f1 und f2

typeset –i a b c d e f function add

{

f=$1+$2 echo $f }

# mainprogram add 1 3

a=1

typeset –i a b c d e f function add

{

focal f f=$1+$2 echo $f }

# mainprogram

add 1 3

(121)

Beispiele für Funktionen: f3

typeset –i a b c d e function add

{

f=$1+$2 echo $f }

# mainprogram add 1 3

a=1 b=4

add $a $b

Ausgabe

(122)

Beispiele:

function readname {

echo -n "Bitte einen Namen eingeben:"

read name }

# mainprogram

readname

(123)

Beispiel Funktion ohne Script:

$ function vii

> {

> for p

> do

> echo $p

> done

> }

Aufruf:

$ vii 11 22 33 44 11

22

33

44

(124)

typeset –i x temp function readzahl {

echo -n "Bitte eine Zahl eingeben:"

read temp }

# mainprogram readzahl

x=temp

x=x+1

echo $x

(125)

Beispiel: Einlesen einer positiven Zahl

function lese {

while true do

read i

if [ $i -gt 0 ] then

break fi

done

retcode=$i }

lese

nr1=$retcode lese

nr2=$retcode

echo "nr1: $nr1 nr2: $nr2"

(126)

Beispiel: Einlesen einer positiven Zahl

function lese {

while true do

read i

if [ $i -gt 0 ] then

break fi

done echo $i }

nr1=lese // fehler

(127)

Beispiel: Einlesen einer positiven Zahl

function lese {

while true do

echo -n Bitte eine Zahl eingeben:

read i

if [ $i -gt 0 ] then

break fi

done echo $i }

nr1=`lese` // korrekt

echo "nr1: $nr1"

Eingabe: 123

Ergebnis: Bitte eine Zahl eingeben: 123

(128)

Beispiel: Einlesen einer positiven Zahl

function lese {

while true do

read i

if [ $i -gt 0 ] then

break fi

done echo $i }

echo -n Bitte eine Zahl eingeben

nr1=`lese` // korrekt

(129)

Vim: Text bearbeiten

O

I_______ixa_______A x ist aktuelle Position o

Befehl Beschreibung

ESC i Fügt Text vor dem aktuellen Zeichen ein ESC I Fügt Text am Zeilenanfang ein

ESC a Fügt Text nach dem aktuellen Zeichen ein ESC A Fügt Text am Zeilenende hinzu

ESC o Fügt eine Zeile unter der aktuellen Zeile ein ESC O Fügt eine Zeile oberhalb der aktuellen ein ESC R Eingabe von Text im Überschreibemodus

Nach der Eingabe eines Textes können Sie mit folgenden Befehlen die

Kursorposition ändern

(130)

Vim: Kursorposition ändern

Befehl Beschreibung

ESC j Eine Zeile nach unten ESC k Eine Zeile nach oben ESC h Ein Zeichen nach links ESC l Ein Zeichen nach rechts ESC w Ein Wort nach rechts ESC Shift I An den Zeilenanfang ESC Shift A An das Zeilenende, ESC ( An den Satzanfang ESC ) An das Satzende

ESC { An den Anfang des Absatzes

ESC} An das Ende des Absatzes

STRG+F Eine Seite rückwärts

(131)

Vim: Ersetzen eines Zeichens

Befehl Beschreibung

ESC r Ersetzt ein Zeichen

ESC c Ändert text, bis ESC bestätigt wird ESC cw Ändert das nächste Wort

ESC cnw Ändert die nächsten n Wörter

(132)

Vim: Löschen von Zeichen

Befehl Beschreibung

ESC x Löscht ein Zeichen ESC dw Löscht bis Wortende

ESC db Löscht bis zum Wortanfang ESC dnw Löscht die nächsten n Wörter ESC dd Löscht die Zeile

ESC d0 Löscht bis zum Zeilenanfang

ESC D Löscht bis zum Zeilenende

ESC dg Löscht bis zur letzten Zeile

ESC dlg Löscht bis zur ersten Zeile

(133)

Vim: Zwischenspeicher

Befehl Beschreibung

ESC Y Übernimmt eine Textzeile in den Standardpuffer ESC nY Übernimmt n-Textzeilen in den Standardpuffer ESC ybsp Speichern den Textes „bsp“ in den Zwischenpuffer ESC yw Übernimmt das nächste Wort in den Standardpuffer

ESC nyw Übernimmt die nächsten n Wörter in den Standardpuffer ESC dd Übernimmt eine Textzeile in den Standardpuffer und

löscht diese.

ESC ddp Übernimmt eine Textzeile in den Standardpuffer und löscht diese und fügt diese nach der nächsten Zeile wieder ein.

ESC p Wenn der Standardpuffer eine Zeile enthält, wird unter der aktuellen Zeile eine neue Zeile eingefügt und der Inhalt des Standardpuffers eingefügt.

ESC P Wenn der Standardpuffer eine Zeile enthält, wird vor der

aktuellen Zeile eine neue Zeile eingefügt und der Inhalt

(134)

Vim: Dateioperationen

Befehl Beschreibung

ESC ZZ Speichert und beendet ESC :w name Schreibt die Datei

ESC :w Schreibt die Datei

ESC :w! Überschreibt eine Readonly-Datei ESC :x Speichert die Änderung und beendet ESC :q! Ende ohne zu speichern

ESC :set number Zeilennumerierung anschalten

ESC:30,60w datei Schreibt Zeile 30 bis 60 in eine neue datei

ESC:30,60w>>datei Schreibt Zeile 30 bis 60 an Ende von

datei

(135)

Vim: Beenden

Befehl Beschreibung

ESC :x Beenden ohne sichern des Inhaltes

ESC :wq! Inhalt nicht zurückschreiben und Ende des Editors ESC ZZ Inhalt zurückschreiben und Ende des Editors

ESC :q! Beenden ohne sichern des Inhaltes

ESC :q Beenden falls gesichert des Inhaltes

Referenzen

ÄHNLICHE DOKUMENTE

– Semantische Elemente (header, section, summary, details, etc.). – Neue Formulare (number, range,

Beim Anklicken soll der Text der Eingabe ausgegeben werden. Falls leer, .Equals, soll eine Meldung erscheinen

■ Show(Text, Caption, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton, MessageBoxOptions,

Excel durch das Binary Interchange FileFormat (BIFF). • Das BIFF ist ein Format, welches Excel als

Aufrufprogramm erstellen: gemeinsamer Ordner Projektname: testdll.. DLL Projekt erstellen:

■ Xubuntu - mit dem schlanken Xfce als grafischer Oberfläche - besonders für ältere Rechner geeignet. ■ Edubuntu - eine speziell angepasste Version für Schulen, mehr im

•ReiserFS ist ein B*-tree basierendes Dateisystem mit einer guten Leistung und überholt sowohl ext2 und ext3 im Umgang mit kleinen Dateien (kleiner als 4 KB) oftmals mit einem

-newer datei Ist erfüllt, wenn die untersuchte Datei nach der letzten Änderung von Datei geändert wurde.. -size zahl Ist erfüllt, wenn die Datei zahl viele