Linux Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm Hochschule Harz FB Automatisierung und Informatik [email protected] http://www.miwilhelm.de Raum 2.202 Tel. 03943 / 659 338 FB Automatisierung und Informatik: Linux 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) FB Automatisierung und Informatik: Linux 2 Bewegen im Dateibaum Verzeichnis: Anmeldeverzeichnis Homeverzeichnis Pfadnamen: • absoluter Pfad • relativer Pfad • Aktuelles Verzeichnis • Oberes Verzeichnis Beginnend mit /user Beginnend mit ./image ./ ../ Befehle: cd change directory cd ~ change to home pwd print working directory FB Automatisierung und Informatik: Linux 3 Verzeichnisbaum / bin boot dev etc home lib mnt proc root usr var user2 user3 home etc init.d sbin tmp sysconfig user1 httpd user2 usr bin local include lib sbin src linux bin sbin FB Automatisierung und Informatik: Linux tmp man lpd spool mail uucp 4 Verzeichnisse: / • Das Wurzelverzeichnis steht ganz oben in der Hierarchie. • Wichtige Programme für Anwender, die immer verfügbar sein müssen, z. B. die Shells. /bin /boot • Hier befinden sich die zum Hochfahren des Systems unbedingt erforderlichen Dateien (kernel mit dem Namen vmlinuz). • Dieses Verzeichnis enthält nur Spezialdateien, sogenannte Gerätedateien. /dev/hda ist die erste Festplatte, /dev/sda die erste SCSI-Festplatte im System. /dev • /home • Verzeichnis der Benutzers FB Automatisierung und Informatik: Linux 5 Verzeichnisse: /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. FB Automatisierung und Informatik: Linux 6 Verzeichnisse: /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. • (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. /opt /mnt /media • Hier werden die Laufwerke für den Zugriff angezeigt. Im Verzeichnis /dev sind sie nur sichtbar. FB Automatisierung und Informatik: Linux 7 Dateibaum 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 Mount eines USB-Sticks mittels Namens: ■ Anlegen des USB-Verzeichnisses, mkdir /mnt/usb1 ■ mount -t vfat /mnt/usb1 -L BUFF_E unmount mittels Verzeichnis: ■ umount /mnt/usb1 FB Automatisierung und Informatik: Linux BUFF_E=Name 8 Logisches Dateisystem Das Dateisystem unter Linux besitzt einen baumähnlichen Aufbau 5 Komponenten: Normale Dateien: Gerätedateien: Verzeichnisse: Benannte Pipes Symbolische Links: Sockets: entspricht den üblichen Dateien Verweise zu E/A-Geräten speichert Dateien und Verzeichnisse Datentransfer zwischen Prozessen (FIFO) Mehrere Verweise auf eine phys. Datei meist auf Servern FB Automatisierung und Informatik: Linux 9 Syntaxdiagramm Kommando Kommandoname Parameter Trennzeichen IFS Variable • Kommando Leerzeichen optionale Parameter • Die IFS Variable steuert die Trennung der Parameter FB Automatisierung und Informatik: Linux 10 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 FB Automatisierung und Informatik: Linux 11 Neuer User: Einloggen mit root – – login: passwd: useradd user1 passwd user1 – – 123456 123456 userdel –r user1 // -r löschen des Homeverzeichnisse Netzwerkadresse: /sbin/ifconfig FB Automatisierung und Informatik: Linux 12 Benutzertypen root – – Systembenutzer – – Hat alle Rechte uid=0 gid=0 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. FB Automatisierung und Informatik: Linux 13 User- Gruppenfunktionen: /etc/group Es ergeben sich 9 Zugriffsrechte Folgende User-Befehle stehen zur Verfügung – – – – – – – – – adduser deluser usermod grpadd chgrp chmod umask chown passwd Benutzer hinzufügen Benutzer löschen Benutzer ändern hinzufügen einer Gruppe change group change mode, Zugriffrechte updatemask, Rechte für neue Dateien change owner Paßwort ändern FB Automatisierung und Informatik: Linux 14 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 FB Automatisierung und Informatik: Linux 15 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 mygroup. FB Automatisierung und Informatik: Linux 16 Userfunktionen:groupadd groupadd optionen groupname -g : ID des Kontos. Werte zwischen 0 bis 99 sind Systemgruppen zugeordnet Beispiel: groupadd mygroup FB Automatisierung und Informatik: Linux 17 Userfunktionen:groupdel und groupmod groupdel groupname Beispiel: groupdel mygroup groupmod groupoldname groupnewname Beispiel: groupmod mygroup mygruppe FB Automatisierung und Informatik: Linux 18 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 schreiben ausführen read write execute Owner rwx Group rwx FB Automatisierung und Informatik: Linux World rwx 19 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. Owner rwx rws Group rwx rws FB Automatisierung und Informatik: Linux World rwx rwt 20 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 FB Automatisierung und Informatik: Linux 21 Rechte Owner Group Size Datum drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxrwxrwt -rwxr-xr-x Anz. Links 10 16 9 2 2 2 2 5 2 1 2 3 1 root root root root root root root root root root root sys root sys sys sys sys sys sys sys sys sys sys sys sys sys 4096 8192 136 0 114 69 36 60 6 21 15 4096 126116 56 Apr Apr Apr Apr Mar Mar Mar Apr Apr Apr Mar Apr Apr 12 22 21 22 13 13 13 21 21 12 13 22 07:00 03:45 05:00 12:19 15:10 15:10 15:10 03:47 03:47 07:00 13:51 12:17 3 dev etc home hw lib lib32 lib64 linux mp ns stand tmp 06:30 unix drwxr-xr-x drwxr-xr-x 44 34 root root sys sys 4096 4096 Apr Mar 12 13 07:00 15:37 usr var FB Automatisierung und Informatik: Linux device 22 Dateiverwaltungskommandos: Unix cp mv ln rm mkdir rmdir pwd cd „blank“ ls cat lp Dos copy ren del md rmdir dir type print Beschreibung Kopieren move link remove make directory remove directory print working directory cd home Liste aller Einträge Anzeige des Inhalts Drucken FB Automatisierung und Informatik: Linux 23 ls Parameter -1 -l -a -la -lh -p -d -r -R -s -S -t -X eins, eine Spalte kleines L, Longformat all files, inkl. Hiddenfiles (Absturz vim) kleines L, Longformat und Hiddenfiles kleines L, Longformat mit / an den Verzeichnissen / an den Verzeichnissen: ls -d */ Reihenfolge Rekursiv mit Dateigröße sortiert nach Dateigröße sortiert nach Datum / Zeit sortiert nach Dateierweiterung FB Automatisierung und Informatik: Linux 24 cp Parameter -f -i -l -L -n -R -r -t -u -v force interactive, Nachfragen erzeugt einen link, statt zu kopieren erzeugt einen symbolischen link, statt zu kopieren no überschreiben -recursive -recursive target directory -update, nur neuere Dateien kopieren verbose, jede Aktion wird dokumentiert FB Automatisierung und Informatik: Linux 25 mv Parameter -f -i -u -v force interactive, Nachfragen -update, nur neuere Dateien kopieren verbose, jede Aktion wird dokumentiert 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 FB Automatisierung und Informatik: Linux 26 rm Parameter -f -i -u -v force interactive, Nachfragen -update, nur neuere Dateien kopieren verbose, jede Aktion wird dokumentiert 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 FB Automatisierung und Informatik: Linux 27 Gerätedateien arbeiten block- oder zeichenorientiert Gerätedateien kapseln die Unterschiede zwischen den Geräten. Die Geräte werden durch logische Nummern angesprochen. major device number minor device number Befehl: ls -l /dev/mf0d ls -l -R /dev Liste der Abkürzungen: • • • • • -b -c -p -l -s Blockorientiertes E/A-Gerät Character-E/A-Gerät FIFO-Datei (Named-Pipe) Symbolischen Link für Socket /dev/null: ? /dev/null„Papierkorb“ FB Automatisierung und Informatik: Linux 28 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 FB Automatisierung und Informatik: Linux 29 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. FB Automatisierung und Informatik: Linux 30 cat /etc/shells: chsh -s /bin/zsh FB Automatisierung und Informatik: Linux 31 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 − History mit Pfeil-Tasten in allen Shells synchron Directory Stack − pushd popd chsh -s /usr/bin/zsh user1 FB Automatisierung und Informatik: Linux 32 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 FB Automatisierung und Informatik: Linux 33 Liste aller Shells unter cygwin FB Automatisierung und Informatik: Linux 34 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 \d \h \j \n \s \t \u \v \$ Warnton Datum Hostname Anzahl der Jobs Zeilenumbruch Name der aktuellen Shell Aktuelle Zeit User Version der Shell Standardprompt FB Automatisierung und Informatik: Linux 35 Ein- und Ausgabeumlenkung Aufgabe: Bestimmung der Anzahl der Dateien in einem Verzeichnis Bestimmen der Anzahl der Buchstaben aller Dateinamen Kommando: ls 1.Dat rekur neg korn2 for cd2 ls fkt case shell_proz oder1 liste grep if fminmax cd sort oder2 loop FB Automatisierung und Informatik: Linux mathe korn1 folgezeichen cd1 t read 36 Ein- und Ausgabeumlenkung EinAusgabeumlenkung Aufgabe: Kommando wc zählt die Zeichen / Wörter / Zeilen Bestimmung der Anzahl der Dateien in einem Verzeichnis Kommando: ls > liste wc < liste Speichern der Ergebnisse in eine Datei Aufruf des Befehls; Eingabe durch die Datei „liste“ ls > liste wc < liste 25 25 138 25 Zeilen 25 Wörter 138 Zeichen FB Automatisierung und Informatik: Linux 37 Ein- und Ausgabeumlenkung EinAusgabeumlenkung 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 FB Automatisierung und Informatik: Linux 38 Ein- und Ausgabeumlenkung EinAusgabeumlenkung Beispiel: Datei1: Informatik ist toll Elektrotechnik ebenso 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 FB Automatisierung und Informatik: Linux 39 Ein- und Ausgabeumlenkung EinAusgabeumlenkung Beispiel: Der Befehl „who“ listet alle aktuell angemeldeten Benutzer who > user wc -l user rm user who | wc -l // das ist ein kleines L FB Automatisierung und Informatik: Linux 40 Standarddateien für Prozesse Jedem Prozess sind Standarddateien zugeordnet Standardeingabe Prozess 0 = Standardeingabe 1 = Standardausgabe 2 = Fehlerausgabe FB Automatisierung und Informatik: Linux Standardausgabe Standardfehlerausgabe 41 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 "2>errorfile" muss ohne Leerzeichen eingetippt werden! FB Automatisierung und Informatik: Linux 42 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 FB Automatisierung und Informatik: Linux 43 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 nach dem [ eingegeben. Negation der Auswahl Wildcards sind für rm, ls, cat, grep, find und cp geeignet FB Automatisierung und Informatik: Linux 44 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 prog* p??? *2* p1.[136] p1.[1-36] p1.[!1-36] ../* ./* Dateien prog1 p1.1, p1.2, p1.3, p1.4, p1.5, p1.6 p1.2 p1.1, p1.3, p1.6 p1.1, p1.2, p1.3, p1.6 p1.4, p1.5 Dateien oberhalb des aktuellen Verzeichnisses prog1, p1.1, p1.2, p1.3, p1.4, p1.5 und p1.6 FB Automatisierung und Informatik: Linux 45 List-Kommando mit Wildcards Dateien im Verzeichnis: • basis.c • bsp1 • main.c • oder2 Befehle: ls b* ls b*.* ls *.c FB Automatisierung und Informatik: Linux Befehl: ls b* • basis.c • bsp1 Befehl: ls b*.* • basis.c Befehl: ls *.c • basis.c • main.c 46 Beispiele: Alias alias alias alias Zuweisen von Zeichenketten an einem neuen Befehl dir='ls –p' ..='cd ..' cd..='cd ..' FB Automatisierung und Informatik: Linux 47 Beispiele: cat Inhalt anzeigen von Dateien -n -v -e -t mit Nummer am Anfang Sonderzeichnen als ^X.... Ausgabe des Dollarzeichens am Ende jeder Zeile (mit -v) Tabs als ^T, Formfeed als ^L FB Automatisierung und Informatik: Linux 48 Beispiele: who -H -m -b Anzeige der aktuellen Benutzer mit Kopfzeile Liste aller Benutzer, bezogen auf das aktuelle Terminal Letzter Bootvorgang ■ su Neue Session mit anderem Account aufmachen ■su root ■ sudo useradd userdel usermod Befehl als root ausführen (ubuntu). Anlegen eines neuen Useraccounts Löschen eines Users. Ändern eines bestehenden Useraccounts. ■ ■ ■ FB Automatisierung und Informatik: Linux 49 Beispiele: whoami Anzeige der aktuellen Benutzer pwd Print working directory ps Anzeige der aktuellen Prozesse -a -A -c -f -j Liste aller terminalabhängigen Prozesse, Vaterprozess Liste aller Prozesse Liste mit Priotitäten Liste mit allen Informationen Ausgabe mit PID und Group-ID kill -9 1234 Prozess mit der Nr 1234 sofort löschen FB Automatisierung und Informatik: Linux 50 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 touch test.dat head test.dat tail test.dat Ausgabe wesentlicher Daten Anlegen einer leeren Datei Anzeige der ersten zehn Zeilen oder bel. Anzeige der letzten zehn Zeilen oder bel. FB Automatisierung und Informatik: Linux 51 Beispiele: ■ ■ ■ ■ ■ ■ ■ shutdown -r now shutdown -h now clear alias • alias ll 'ls -l' • alias dir 'ls' chgrp chmod chown neu starten runterfahren löschen Bildschirm Gruppenzugehörigkeit einer Datei ändern Zugriffsrechte ändern Eigentümer einer Datei ändern FB Automatisierung und Informatik: Linux 52 Beispiele: ■ ■ ■ ■ ■ ■ ■ ■ ■ touch ifconfig Datum / Zeit einer Datei ändern 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 FB Automatisierung und Informatik: Linux 53 Beispiele: df Anzeige des freien Speichers (Disk free) Filesystem Type blocks use /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 1989581056 1729751984 259829072 87 194.95.16.234:/home nfs FB Automatisierung und Informatik: Linux avail %use Mounted on /home 54 Beispiele: du -k -a -s Anzeige des benutzten Speichers (Disk used) sort -r -n -u Anzeige in K-Byte Anzeige als Liste mit allen Dateien Es wird nur eine Summe pro Teilbaum ausgegeben Sortieren einer Datei (aufsteigend) Umgekehrte Reihenfolge (absteigend) Numerisches Sortieren Eindeutige Ergebnisse FB Automatisierung und Informatik: Linux 55 Beispiele: chmod nnn go+r u+x a r w x X s t l Änderung des Zugriffs einer Datei(en) Hexadezimale Beschreibung (User, Group, Other, RWX) Setzen zum Lesen (g,u,o) Setzen als Ausführbare Datei Für alle Gruppen reading permission writing permission execution permission execution permission (see below) user or group set-ID is turned on sticky bit is turned on mandatory locking will occur during access FB Automatisierung und Informatik: Linux chmod.bsp 56 Userfunktionen: adduser for nr in 1 2 3 4 5 6 7 8 9 do adduser u$nr passwd u$nr < p done In Datei p steht das Passwort: student student for (( i=1; i<10; i++)) do adduser u$i passwd u$i < p done FB Automatisierung und Informatik: Linux 57 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 Deklaration Wertzuweisung Wertreferenzierung Beispiel $ paul= $ paul=otto $ echo $paul FB Automatisierung und Informatik: Linux Bildausgabe otto 58 Prozesskommandos ps kill process löschen nice Priorität des Befehls ändern nohup Kommando kann durch die Signale − − − − process status 1: Beenden der Verbindung 2: Interrupt-Signal (Del) 3: Quit-Signal (<Strg><\> 15: kill Befehl sleep warten − sleep 13 FB Automatisierung und Informatik: Linux 59 Befehl prozess ps • Der Befehl ps listet alle vorhandenen Prozesse auf ps -A PID TTY 1 78 187 271 272 TIME CMD ? 0:28 ? 0:26 ? 3:53 ? 1:47 ? 0:00 init syslogd ilmid nsd rpcbind FB Automatisierung und Informatik: Linux 60 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 / • ls -R cd / ls& -R FB Automatisierung und Informatik: Linux 61 Prozesspriorität Linux verwaltet die Rechenzeit bzgl. der Prozesse im Timesharing Verfahren Umschaltung Prozess 1 Prozess 2 P1 FB Automatisierung und Informatik: Linux Prozess 3 Prozess 1 62 Prozesspriorität Grundprioritäten der Prozesse: Schedulerprozess Systembereich Anwender 70-100 30-70 0-30 Priorität = f(Grundpriorität, passive Zeit, nice-Wert) Beispiel: nice -40 cc test.c FB Automatisierung und Informatik: Linux 63 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 echo I like $myshell my=Bash echo I like ${my}shell FB Automatisierung und Informatik: Linux Korn1 korn2 64 Gültigkeitsdauer von Variablen $lage=oben $echo $lage oben Variable lage wird deklariert mit oben Wert der Variablen wird referenziert Wert der Variablen auf dem Bildschirm $ bash $ echo $lage Aufruf einer Sub-Shell Wert der Variablen wird referenziert Variable lage ist in der Sub-Shell nicht bekannt $ lage=unten $ echo $lage unten $ exit $ echo $lage oben lage wird ein neuer Wert zugewiesen Wert der Variablen erneut referenziert neuer Wert auf dem Bildschirm Abmelden von der Sub-Shell, damit ist die alte Shell aktiv erneut wird der Wert referenziert der erste Wert ist erhalten geblieben FB Automatisierung und Informatik: Linux 65 Gültigkeitsdauer von Variablen $lage=oben $echo $lage oben $ export lage $ bash $ echo $lage oben $ lage=unten $ echo $lage unten $ exit $ echo $lage oben Variable lage wird deklariert mit oben Wert der Variablen wird referenziert Wert der Variablen auf dem Bildschirm die Variable lage wird exportiert Aufruf einer Sub-Shell Wert der Variablen wird referenziert Variable lage ist in der Sub-Shell nicht bekannt durch den Export der Variablen an die Sub-Shell übergeben lage wird ein neuer Wert zugewiesen Wert der Variablen erneut referenziert neuer Wert auf dem Bildschirm Abmelden von der Sub-Shell, damit ist die alte Shell aktiv erneut wird der Wert referenziert der erste Wert ist erhalten geblieben FB Automatisierung und Informatik: Linux 66 Umgebungsvariablen einer Shell Variable HOME PATH PS1 PS2 MAIL IFS Bedeutung Home-Directory des Benutzers Anzahl von Directories zur Kommandosuche Anzahl von Directories für das Kommando cd 1. Promptzeichen $ oder # 2. Promptzeichen > Pfad zum elektronischen Briefkasten Separatorzeichen für Kommandozeile TZ Zeitzone CDPATH SHELL Pfadname der aktiven Shell RANDOM Anzeige einer Zufallszahl 0 bis 32767 FB Automatisierung und Informatik: Linux typischer Wert /home/otto /bin:/usr/bin:/etc ~/verz1:~/labor "$\PWD> " "weiter> " /usr/spool/mail/otto TAB, NL, Leerzeichen MEZ1MESZ,3.2.0,9.2.0 /bin/bash 67 Positionsparameter als Variable Positionsparameter $# $0 $1 : $9 $@ $* Bedeutung Anzahl der Argumente ohne kommandoname Name des Kommandos (kommandoname) 1. Argument nach dem Kommandoname : 9. Argument nach dem Kommandoname alle Argumente ohne Kommandoname alle Argumente ohne Kommandoname FB Automatisierung und Informatik: Linux 68 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 ?! FB Automatisierung und Informatik: Linux 69 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: emil erna paul fred otto Meine Prozessnummer PID = 4711 $ FB Automatisierung und Informatik: Linux 70 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 FB Automatisierung und Informatik: Linux 71 Apostrophierung: echo guten morgen echo eins zwei drei echo * wie gehts? * echo '* wie gehts? *' echo 'Pfadvariable: $PATH' echo "Pfadvariable: $PATH, UID: $uid, GID: $gid" " ' Ersetzung von die Variablen Keine Ersetzung Ersetzung * und die Variablen FB Automatisierung und Informatik: Linux 72 IFS und die Apostrophierung: • • Diese Variable bestimmt die Trennung der Parameter IFS definiert die möglichen Trennzeichen echo IFS echo "IFS" Variable IFS wird ausgewertet Inhalt angezeigt, nur Variablenersetzung IFS= %:, IFS=“_%:," Korrekte Definition: (Blank % ,) e1="1111 echo $e1 IFS=",%:" echo $e1 3333 ⇒ ⇒ 5555" 1111 3333 5555 Trennzeichendefinition 1111 3333 5555 FB Automatisierung und Informatik: Linux 73 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 durch ein Leerzeichen ersetzt FB Automatisierung und Informatik: Linux 74 Ausgabe mit echo: Zusätzliche Sonderzeichen: Darstellung ASCII-Code Bedeutung \a \b \c \f \n \r \t \v \\ \0xxx 7 8 ? 12 10 13 9 11 92 xxx Piepston Backspace Ausgabe beenden ((Bash), Kornshell) Form Feed (Neue Seite) Zeilenvorschub Carriage Return (Wagenrücklauf) Tabulator Vertikaltabulator Backslash Zeichen mit ASCII-Code FB Automatisierung und Informatik: Linux 75 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 ⇒ DOS-Verzeichnis: alphabetagamma FB Automatisierung und Informatik: Linux 76 Shell Sonderzeichen Kommentar: # – print "Guten Morgen" – print # "Guten Morgen" # Kommentar # Kommentar Folgezeile: \ – print Dieses Komman\ do ist über meh\ rere Zeilen verteilt Start: Strg+q Start / Stop Strg+s Shellende Strg+d FB Automatisierung und Informatik: Linux 77 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 FB Automatisierung und Informatik: Linux 78 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: zz ? ? ? -n Kein Zeilenumbruch -t Ersetzen Sonderzeichen FB Automatisierung und Informatik: Linux read1 read2 79 Einlesen mit read: Ausgabe eines Zusatztextes: echo Eingabe read xx echo -n Eingabe read xx // Kein Zeilenumbruch echo -n "Eingabe: " read xx // Kein Zeilenumbruch read –p "Eingabe: " xx // Kein Zeilenumbruch FB Automatisierung und Informatik: Linux read3 80 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) FB Automatisierung und Informatik: Linux 81 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 if2 FB Automatisierung und Informatik: Linux 82 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 FB Automatisierung und Informatik: Linux 83 Arithmetische Vergleiche: Abfrage $x -lt $y $x -le $y $x -eq $y $x -ne $y $x -gt $y $x -ge $y Bedeutung x ist kleiner als y x ist kleiner oder gleich als y x ist gleich als y x ist ungleich als y x ist größer als y x ist größer oder gleich als y Beispiel: if [ $x -lt $y ] then Befehler fi FB Automatisierung und Informatik: Linux 84 Kontrollstrukturen: Bedingte und einfache Fallunterscheidungen if bedingung then kommando_1 else kommando_2 fi if bedingung then kommando_1a kommando_1b kommando_1c else kommando_2a kommando_2b fi bsp/if/ if1 FB Automatisierung und Informatik: Linux if2 85 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 Ausgabe: FB Automatisierung und Informatik: Linux T3 86 Beispiele Bash: typeset [-afFirtx] [-p] name[=value] declare [-afFirtx] [-p] name[=value] typeset -i k typeset -i k m n # Integervariable k # Integervariable k, m, n -a -f -r -t -x -p -F # Explizite Definition eines Arrays # Use function name only # Variablen sind readonly # Erhält trace-Attribut (Debug) # Export # Anzeige aller Variablen und Namen # Verhindert die Anzeige der Funktionsdefinitionen FB Automatisierung und Informatik: Linux 87 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) -r <datei> datei existiert und Leserecht FB Automatisierung und Informatik: Linux 88 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> -G <datei> -L <datei> -S <datei> -N <datei> datei existiert und Eigentümer User datei existiert und Eigentümer Group datei existiert und ist symbolischer Link datei existiert und ist Socket datei existiert und wurde nach dem letzten Lesen geändert FB Automatisierung und Informatik: Linux 89 Dateieigenschaften prüfen if [ ausdruck datei ] ausdruck Bedeutung -d <datei> -f <datei> -h <datei> datei existiert und ist Verzeichnis datei existiert und ist einfache Datei datei existiert und ist eine symbolische Linkdatei FB Automatisierung und Informatik: Linux 90 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> -G <datei> -L <datei> -S <datei> -N <datei> datei existiert und Eigentümer User datei existiert und Eigentümer Group datei existiert und ist symbolischer Link datei existiert und ist Socket datei existiert und wurde nach dem letzten Lesen geändert FB Automatisierung und Informatik: Linux 91 Dateiabfragen: datei1 datei1 datei1 -z string -n string Beispiel: -nt -ot -ef datei2 datei2 datei2 datei1 ist neuer als datei2 datei1 ist älter als datei2 datei1, datei2 Links auf dieselbe Datei string ist leer (zero) string ist nicht leer if [ -n "$sStr" ] then Befehle fi FB Automatisierung und Informatik: Linux 92 Bedingte und einfache Fallunterscheidungen Beispiele: If [ -d $1 ] then echo $1 ist ein Verzeichnis else echo $1 ist kein Verzeichnis fi if1 FB Automatisierung und Informatik: Linux if2 93 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. FB Automatisierung und Informatik: Linux 94 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 FB Automatisierung und Informatik: Linux 95 Wahrheitstabellen $ who | grep guest && write guest < nachricht Anwesende User Kommando1 UND Kommando2 guest Result = 0 ⇒ ok Kommando wird ausgeführt: Result = 0 ⇒ ok Kommando wird nicht ausgeführt: Result ≠ 0 ⇒ nichtok Kein guest Result = 1 ⇒ false Result = 0 ⇒ ok Result ≠ 0 ⇒ nichtok FB Automatisierung und Informatik: Linux 96 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 Result = 0 ⇒ ok schmidt Wird nicht gestartet Result = 0 ⇒ ok Echo wird ausgeführt schmidt Result ≠ 0 ⇒ nichtok Result = 0 ⇒ ok Keiner von beiden Result ≠ 0 ⇒ nichtok Result ≠ 0 ⇒ nichtok Result = 0 ⇒ ok Echo wird ausgeführt Result ≠ 0 ⇒ nichtok Echo wird nicht ausgeführt Frage: Welche User sind wann angemeldet? FB Automatisierung und Informatik: Linux 97 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 Frage: Welche User sind wann angemeldet? FB Automatisierung und Informatik: Linux 98 Wahrheitstabellen (who | grep meier) || (who | grep schmidt) || echo “ schmidt und meier" User Kommando1 Kommando2 Result = 0 ⇒ ok Wird nicht gestartet Result = 0 ⇒ ok Wird nicht gestartet Komanndo3 ODER Result ≠ 0 ⇒ nichtok Result = 0 ⇒ ok Result ≠ 0 ⇒ nichtok Result ≠ 0 ⇒ nichtok Welche User sind wann angemeldet und welche Kommandos werden gestartet? FB Automatisierung und Informatik: Linux 99 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 Result = 0 ⇒ ok schmidt Wird nicht gestartet Wird nicht gestartet schmidt Result ≠ 0 ⇒ nichtok Result = 0 ⇒ ok Keiner von beiden Result ≠ 0 ⇒ nichtok Result ≠ 0 ⇒ nichtok Wird nicht gestartet Wird gestartet Welche User sind wann angemeldet und welche Kommandos werden gestartet? FB Automatisierung und Informatik: Linux 100 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 FB Automatisierung und Informatik: Linux 101 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 sum=$(( 1 + ( a + b ) * ( a - b ) )) echo $sum FB Automatisierung und Informatik: Linux 102 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 FB Automatisierung und Informatik: Linux 103 Arithmetik: Operatoren: + − * / % += −= *= /= %= Addition Substraktion Multiplikation Ganzzahlige Division Modulo Addition Substraktion Multiplikation Ganzzahlige Division Modulo FB Automatisierung und Informatik: Linux 104 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 FB Automatisierung und Informatik: Linux 105 Beispiele einer Zählschleife: Wenn der Positionsparameter $* bzw. alle Parameter verwendet werden soll, wird die Zählschleife wie folgt notiert: for name in $* for (( i=1; i<10; i++ )) do kommandoliste do done echo $i done Feste Schleifenanzahl: for i in 1 2 3 4 5 6 do echo "Hallo" done FB Automatisierung und Informatik: Linux for i in {1,4,5,6,7,11} for i in {1..5} do echo $i done 106 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 FB Automatisierung und Informatik: Linux 107 Whileschleife: Schleife mit Eingangsbedingung: while [ Bed ] do kommandoliste done Break und Continue ändern die Abarbeitung FB Automatisierung und Informatik: Linux 108 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 FB Automatisierung und Informatik: Linux 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 109 Array Es gibt einfache Felder und Hashmaps Notation: − − − − − − x=() x[0]='a' x[1]='b' x=('a' 'b' 'c') echo ${x[1]} echo ${x[@]} leeres Feld alle Elemente FB Automatisierung und Informatik: Linux 110 HashMap Notation: − − − − − − − − − declare –a y declare –A y leeres HashMap 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 FB Automatisierung und Informatik: Linux 111 Case / Switch Anweisung: Statt verschachtelter if-Anweisungen erlaubt die Case-Anweisung eine übersichtlichere Programmierung: case Bed in (muster1) kommandoliste ;; (muster2) kommandoliste ;; esac FB Automatisierung und Informatik: Linux 112 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.. FB Automatisierung und Informatik: Linux case1 case2 113 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 ;; *) echo rest exit 2 esac Aufruf mit bash case2 Wollen.. FB Automatisierung und Informatik: Linux case1 case2 114 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 FB Automatisierung und Informatik: Linux 115 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;; (' ' ) print -u2 "$name ist kein einfacher Name" exit 1;; esac FB Automatisierung und Informatik: Linux 116 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" FB Automatisierung und Informatik: Linux 117 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 { Anweisungen } FB Automatisierung und Informatik: Linux 118 Beispiele für Funktionen function readname { echo -n "Bitte einen Namen eingeben:" read name } function list { ls -aF } # mainprogram ls > dat1 list # mainprogram readname FB Automatisierung und Informatik: Linux 119 Beispiele für Funktionen: f1 und f2 typeset –i a b c d e f typeset –i a b c d e f function add { f=$1+$2 echo $f } function add { focal f f=$1+$2 echo $f } # mainprogram add 1 3 a=1 b=4 add $a $b # mainprogram add 1 3 a=1 b=4 add $a $b FB Automatisierung und Informatik: Linux 120 Beispiele für Funktionen: f3 typeset –i a b c d e function add { f=$1+$2 echo $f } Ausgabe # mainprogram add 1 3 a=1 b=4 add $a $b FB Automatisierung und Informatik: Linux frage 121 Beispiele: function readname { echo -n "Bitte einen Namen eingeben:" read name } # mainprogram readname FB Automatisierung und Informatik: Linux 122 Beispiel Funktion ohne Script: $ function vii >{ > for p > do > echo $p > done >} Aufruf: $ vii 11 22 33 44 11 22 33 44 FB Automatisierung und Informatik: Linux 123 typeset –i x temp function readzahl { echo -n "Bitte eine Zahl eingeben:" read temp } # mainprogram readzahl x=temp x=x+1 echo $x FB Automatisierung und Informatik: Linux 124 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" FB Automatisierung und Informatik: Linux fminmax 125 Beispiel: Einlesen einer positiven Zahl function lese { while true do read i if [ $i -gt 0 ] then break fi done echo $i } nr1=lese echo "nr1: $nr1" // fehler FB Automatisierung und Informatik: Linux fminmax 126 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 FB Automatisierung und Informatik: Linux fminmax 127 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 echo "nr1: $nr1" FB Automatisierung und Informatik: Linux fminmax 128 Vim: Text bearbeiten O I_______ixa_______A o Befehl ESC i ESC I ESC a ESC A ESC o ESC O ESC R x ist aktuelle Position Beschreibung Fügt Text vor dem aktuellen Zeichen ein Fügt Text am Zeilenanfang ein Fügt Text nach dem aktuellen Zeichen ein Fügt Text am Zeilenende hinzu Fügt eine Zeile unter der aktuellen Zeile ein Fügt eine Zeile oberhalb der aktuellen ein Eingabe von Text im Überschreibemodus Nach der Eingabe eines Textes können Sie mit folgenden Befehlen die Kursorposition ändern FB Automatisierung und Informatik: Linux 129 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 STRG+B Eine Seite vorwärts STRG+H Kursor geht zurück, ohne den Editmodus zu verlassen FB Automatisierung und Informatik: Linux 130 Vim: Ersetzen eines Zeichens Befehl ESC r ESC c ESC cw ESC cnw Beschreibung Ersetzt ein Zeichen Ändert text, bis ESC bestätigt wird Ändert das nächste Wort Ändert die nächsten n Wörter FB Automatisierung und Informatik: Linux 131 Vim: Löschen von Zeichen Befehl ESC x ESC dw ESC db ESC dnw ESC dd ESC d0 ESC D ESC dg ESC dlg Beschreibung Löscht ein Zeichen Löscht bis Wortende Löscht bis zum Wortanfang Löscht die nächsten n Wörter Löscht die Zeile Löscht bis zum Zeilenanfang Löscht bis zum Zeilenende Löscht bis zur letzten Zeile Löscht bis zur ersten Zeile FB Automatisierung und Informatik: Linux 132 Vim: Zwischenspeicher Befehl ESC Y ESC nY ESC ybsp ESC yw ESC nyw ESC dd ESC ddp ESC p ESC P Beschreibung Übernimmt eine Textzeile in den Standardpuffer Übernimmt n-Textzeilen in den Standardpuffer Speichern den Textes „bsp“ in den Zwischenpuffer Übernimmt das nächste Wort in den Standardpuffer Übernimmt die nächsten n Wörter in den Standardpuffer Übernimmt eine Textzeile in den Standardpuffer und löscht diese. Übernimmt eine Textzeile in den Standardpuffer und löscht diese und fügt diese nach der nächsten Zeile wieder ein. Wenn der Standardpuffer eine Zeile enthält, wird unter der aktuellen Zeile eine neue Zeile eingefügt und der Inhalt des Standardpuffers eingefügt. Wenn der Standardpuffer eine Zeile enthält, wird vor der aktuellen Zeile eine neue Zeile eingefügt und der Inhalt des Standardpuffers eingefügt. 133 FB Automatisierung und Informatik: Linux Vim: Dateioperationen Befehl Beschreibung ESC ZZ ESC :w name ESC :w ESC :w! ESC :x ESC :q! ESC :set number ESC:30,60w datei Speichert und beendet Schreibt die Datei Schreibt die Datei Überschreibt eine Readonly-Datei Speichert die Änderung und beendet Ende ohne zu speichern Zeilennumerierung anschalten Schreibt Zeile 30 bis 60 in eine neue datei Schreibt Zeile 30 bis 60 an Ende von datei ESC:30,60w>>datei FB Automatisierung und Informatik: Linux 134 Vim: Beenden Befehl ESC:x ESC:wq! ESC ZZ ESC:q! ESC:q Beschreibung Beenden ohne sichern des Inhaltes Inhalt nicht zurückschreiben und Ende des Editors Inhalt zurückschreiben und Ende des Editors Beenden ohne sichern des Inhaltes Beenden falls gesichert des Inhaltes FB Automatisierung und Informatik: Linux 135 Vim: Suchen Befehl ESC /= ESC n n :%s/ab/cd/ Beschreibung Sucht das erste = ab Position Nächste Suche Nächste Suche Ersetzt die Buchstaben ab durch cd Vim: Sprung / Goto Befehl ESC +100 ESC :n ESC G Beschreibung Sprung zur 100. Zeile Cursor in Zeile n Cursor ans Ende des Dokumentes FB Automatisierung und Informatik: Linux 136 Befehl Beschreibung ESC i Einfügemodus, vor dem Cursor ESC a Einfügemodus, nach dem Cursor ESC x Zeichen löschen ESC d Löscht die Zeile ab Kursorposition ESC dd Löscht die Zeile ESC O Neue Zeile oberhalb ESC o Neue Zeile unter aktuellen ESC I Fügt Text am Zeilenanfang ein ESC A Fügt Text am Zeilenende ein ESC :w name Speichert die Datei unter dem Namen ESC :w Speichert die Datei ESC: w! Speichert die Datei auch bei Schreibschutz ESC :x Speichert die Änderung und beendet ESC :q! Ende ohne zu speichern, ohne Abfrage ESC :q Ende ohne zu speichern, mit Abfrage ESC ZZ, :wq Speichert und Ende ESC u FB Automatisierung und Informatik: Linux UNDO Vim: Zusammenfassung 137 Hilfe: - -help − − Jedem Kommando - - help (ohne Leerzeichen) anfügen Beispiel: ls --help Manual (Manpages) − Das Manual verweist auf viele externe Kommandos Beispiele: − • • man –k Suchbegriff man –f Kurzbegriff help − Hilfe für die internen Kommandos der Shells info − Für Programm, die keine interne Hilfe haben Beispiele: − • info ls FB Automatisierung und Informatik: Linux 138