Bash2.teil2.pdf
Document Details
Uploaded by RevolutionaryFern2779
Hochschule Esslingen
Full Transcript
BASH: PROGRAMMIERBARKEIT l Die “Mächtigkeit“ aller Shells liegt in der Programmierbarkeit! l UNIX verfolgt dabei das KISS Prinzip: Keep It Simple, Stupid l 1 Programm macht 1 Sache -> diese aber gut. l Beispiele: sort, date, find, … l UNIX Programme lassen sich ko...
BASH: PROGRAMMIERBARKEIT l Die “Mächtigkeit“ aller Shells liegt in der Programmierbarkeit! l UNIX verfolgt dabei das KISS Prinzip: Keep It Simple, Stupid l 1 Programm macht 1 Sache -> diese aber gut. l Beispiele: sort, date, find, … l UNIX Programme lassen sich kombinieren: l Die “Standardausgabe“ eines Programms (File-Descriptor 1) lässt sich in die Eingabe des nächsten Programms weiterreichen (mittels Pipe “|“ Symbol) l $ sort file.txt | tail -n 5 | grep -E 'd$‘ l Ablauf: Sortiert file.txt alphanumerisch, nimmt die letzten 5 Zeichen und such mit regulärem Ausdruck nach Zeilen die auf “d“ enden! 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 23 BASH: RÜCKGABEWERTE l Fehlerfrei beendete Programme liefern immer den Rückgabewert 0, ansonsten ungleich Null. l Die Fehlerfreiheit kann man in Bash abfragen mittels: l && Programm fehlerfrei beendet, und l || Programm fehlerbehaftet beendet l $ grep -qi "gold" file.txt && echo 'Found Gold!‘ l $ gcc –Wall –O2 –o app app.c &&./app J 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 24 BASH: MIT FIND DATEIEN, VERZEICHNISSE UND GERÄTE FINDEN (I) l Mit find lassen sich Dateien, Verzeichnisse, Gerätedateien finden: l $ find. -maxdepth 3 -name \*.c l Ablauf: Findet alle Dateien in diesem Verzeichnis (.) und bis zu drei Unterverzeichnisse tiefer mit der Dateiendung.c (also C-Programmdatei). l Achtung: Die Verknüpfung mittels Pipes ist manchmal schwierig, da UNIX Dateien Leerzeichen (und Sonderzeichen) enthalten dürfen. l Sonderzeichen (bspw. Leerzeichen, das ? Oder der *) müssen mit “\“ escaped werden! l $ find. –maxdepth 3 –name \*.c –print0 | xargs -0 grep –i 'Fix‘ l Ablauf: Findet alle Dateien in diesem Verzeichnis (.) und bis zu drei Unterverzeichnisse tiefer mit der Dateiendung.c (also C-Programmdatei), welche Fix enthalten (Groß/Kleinschreibung ignoriert). 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 25 BASH: MIT FIND DATEIEN, VERZEICHNISSE UND GERÄTE FINDEN (II) l Die Syntax für find lautet: l $ find DIR [Parameter]* , wobei die Parameter sein können: l -type X Suche nach Typ u.a. f (file), d (directory), l (soft-link) l -iname X Name der Datei/Verzeichnis entspricht dem Reg. Ausdruck l -ctime -1 Verändert vor weniger als 24h (bspw. kann das in’s Backup!) l -user X Datei gehört Nutzer X (auch als numerischer Wert) l -nouser Datei gehört keinem gültigen Nutzer (nicht in /etc/passwd) l -nogroup Datei gehört keiner gültigen Gruppe (nicht in /etc/group) 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 26 BASH: SONDERZEICHEN UND STRING-BEHANDLUNG (I) l Bestimmte Sonderzeichen müssen geschützt werden, sollten diese bspw. In einem Dateinamen vorkommen: l / à Verzeichnistrenner (das wäre aber als Teile eines Dateinamens sehr ungewöhnlich...) l ? à WildCard für ein beliebiges Zeichen l * à WildCard für eine beliebige Zeichenkette: $ ls bo*t listet Dateien boat, bolt und boot... Und eben bot. l [ ] à Ein Teil eines regulären Ausdrucks für eine Zeichenauswahl $ ls bo[ao]t listet die Dateien boat und boot... Aber nicht bolt oder wieder bot. l [A-Z] à Ein Zeichenbereich $ ls bo[a-o]t listet die Dateien boat, bolt... Aber auch bobt, boct, bodt, usw. l … 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 27 BASH: SONDERZEICHEN UND STRING-BEHANDLUNG (II) l Bestimmte Sonderzeichen müssen geschützt werden, sollten diese bspw. In einem Dateinamen vorkommen: l … l < , > à Ein Sonderzeichen um Ein- und Ausgabe umzuleiten $ program > log.txt leitet die Std.-Ausgabe nach log.txt, aber nicht die Fehlerausgabe l | || ; && à Verknüpfung von Programmen; einzig neu „;“ als Trenner von Befehlen: $ programm1 ; programm2 wie wenn die Programme auf zwei Zeilen geschrieben wären l ( , ) à Zusammenfassung von Programmen & Befehlen zu Gruppen 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 28 BASH: SONDERZEICHEN UND STRING-BEHANDLUNG (III) l Besondere Beachtung sollten Anführungszeichen finden: l "x" à Ein String (also inklusive Leerzeichen), wird von der Shell noch interpretiert, d.h. darin enthaltene $var und andere Sonderzeichen werden textuell ersetzt! l 'x' à Ein String (also inklusive Leerzeichen), wird nicht interpretiert. Man kann also getrost auch Dollars übergeben: echo 'mucho $$!‘ l `x` à Erzeugen einer Sub-Shell, bspw. zum Erzeugen von Eingabe. Die Alternative $(x) ist deutlich besser lesbar (s.u.)! l Tatsächlich haben alle ihre Berechtigung. l Für Profis: Eine Subshell erlaubt das Evaluieren, bspw. einer Argumentenliste: $ for i in $(cat stud_list.txt); do du –hs $i ; done Das i nimmt die Werte an, du liefert Disk Usage der Verzeichnisse der Studies! 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 29 BASH: DAS $ STEUERZEICHEN l Das $ ist ein besonders Sonderzeichen. Die Bash interpretiert folgendes: l $0 à Name des ausgeführten Scripts, wenn keines ausgeführt: "-bash" l $1 à Erster dem Script übergebener Parameter ($2 ist zweiter, usw.) l $* à Alle Parameter zusammengeführt, aber durch Leerzeichen $IFS getrennt) l $# à Die Anzahl der übergebenen Parameter l $@ à Die einzelnen Parameter l $? à Rückgabewert des zuletzt beendeten Programms l $$ à Die Prozess-ID (PID) des aufrufenden Skripts / der Bash l $! à PID des letzten, im Hintergrund laufenden Prozesses: $ sleep 60 & # Schläft 60 sek., Shell kommt zurück 1234 # und liefert u.a. die PID von sleep $ echo $! # mit $! bekommt man die PID direkt! l Mit $((... )) wird ein arithmetischer Ausdruck evaluiert, bspw. $ i=0 $ while test $i -lt 10; do echo i:$i; i=$(($i + 1)); done 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 30 BASH: TEST PROGRAMM l Mit Hilfe des Bash-Programms test können Bedingungen geprüft werden: l -e file.txt à Parameter wird als Datei interpretiert, und prüft auf Existenz! l -d FILE_OR_DIR à Ob dies ein Verzeichnis / Directory ist l -f file.txt à Ob dies ein File ist... l -r file.txt à Datei ist lesbar (readable), -w writeable, -x executable l -s file.txt à Datei ist größer 0 Bytes l Strings können ebenso getestet werden: l -z à Parameter als String interpretiert, prüft Länge auf Null (zero) $ s=""; test –z "$s" && echo "s ist 0 Zeichen lang“ l test s1 = s2 prüft ob String s1 und s2 gleich sind l Numerische Tests: l N -le M prüft ob N kleiner gleich M ist (lower or eqal) l N -gt M prüft ob N größer gleich M ist (greater than) 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 31 BASH: TAR PROGRAMM l Mit Hilfe des Tape Archive (kurz: tar) Programm lassen sich Backups aller Dateien erzeugen. Je nach Parameter und Einstellung werden die Daten direkt komprimiert (verbraucht weniger Speicherplatz): l $ tar [parameter]* l -c à Create: Erstellt neue tar Datei l -f file.txt à FileName: Name der Datei, die gepackt werden soll l -v à Verbose: Konsolenausgaben über aktuellen Prozesschritt l -x file.txt à Extract: Entpackt eine tar Datei zu einem Verzeichnis l Beispiel: l $ find. -ctime -1 -print0 | tar -cvf tar-`date '+%Y.%m.%d'`.tar --null -T – l Ablauf: Auflisten aller Dateinamen im aktuellen Verzeichnis (.) und erstellen eines tar backups. 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 32 TIPPS UND TRICKS: ALIAS l Mit Hilfe von alias lassen sich Bash Befehle umprogrammieren: l $ alias l=“ls –al“ à nur noch kleines l für Auflisten der Dateien l $ alias mnt="mount | awk -F' ' '{ printf \"%s\t%s\n\",\$1,\$3; }' | column -t | egrep ^/dev/ | sort” l Ablauf: Legt Befehl “mnt” fest der alle aktuell eingebundenen Geräte auflistet und nach Namen sortiert. l Hinweis: Um vorgenommene Einstellungen rückgängig zu machen, hilft das aus- und wieder einloggen. 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 34 TIPPS UND TRICKS:.BASHRC /.ZSHRC l Beim Einloggen des Benutzers wird standardmäßig die Datei ~/.bashrc gelesen. l Hier kann man Änderungen vornehmen um eigene Kürzel, Befehle oder Programme zu laden l Hinweis: Da macOS die z-Shell benutzt können Änderungen in der ~/.zshrc vorgenommen werden. 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 35 BETRIEBSSYSTEME SERVER: BS_LAB l Für jeden Teilnehmer dieses Kurses existiert ein Account auf dem Betreibssysteme-Server bslab-it: l Login: $ ssh [email protected] l Jeder Nutzer hat: l eine eindeutige User-ID (UID), diese steht in /etc/passwd l Gehört min. zu einer Benutzer-gruppe (z.B.: zu staff) l Jeder Nutzer darf: l (fast) beliebig viele Prozesse starten (Hinweis: Ein Programm besteht aus mind. einem Prozess) l Manche Nutzer dürfen SuperUser root werden, mit su - oder mit sudo. l Vorsicht: Dieser Nutzer darf alles, wirklich ALLES!!! 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 37 TIPPS UND TRICKS: ALIAS l Mit Hilfe von alias lassen sich Bash Befehle umprogrammieren l $ tar [parameter]* l -c à Create: Erstellt neue tar Datei l -f file.txt à FileName: Name der Datei, die gepackt werden soll l -v à Verbose: Konsolenausgaben über aktuellen Prozesschritt l -x file.txt à Extract: Entpackt eine tar Datei zu einem Verzeichnis l Beispiel: l $ find. -ctime -1 -print0 | tar -cvf tar-`date '+%Y.%m.%d'`.tar --null -T – l Ablauf: Auflisten aller Dateinamen im aktuellen Verzeichnis (.) und erstellen eines tar backups. 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 38