Übungsblatt 3 Name: Joe User (zusammen mit Bobby Brown) Tutor: ???? Email: juser@icp.uni-stuttgart.de ========== AUFGABE 3.1 (Shellskripte) ========== 3.1.1 Warum ist es ein Sicherheitsproblem, wenn man "." in die Umgebungsvariable PATH aufnimmt? Der "." steht immer für das Verzeichnis, in dem sich die Shell gerade befindet. Es ist möglich, dass in diesem Verzeichnis z.B. Shell-Skripte liegen, die andere Benutzer dort hin gelegt haben, und die den Namen eines Standard-Befehls (z.B. "ls") tragen. Wenn man in diesem Verzeichnis also "ls" ausführt, dann wird das Shell-Skript aufgerufen - mit den eigenen Rechten! Ein solches Skript könnte Code enthalten, der beispielsweise alle Dateien im Heimatverzeichnis löscht. ========== 3.1.2 Was soll das Skript tun? Wofür ist es nützlich? Das Skript verkleinert alle Bilder im angegebenen Verzeichnis auf eine Grösse von maximal 640x640 Pixeln. Das ist nützlich, um beispielsweise die Bilder per Email zu verschicken. ========== 3.1.3 Korrigiertes Skript: #!/bin/bash # # A useful script when sending images via email - if it wasn't so buggy... # # set variables # FEHLER: Leerzeichen zwischen dem Variablennamen und "=" defaultdir=. maxsize=640x640 # command line handling dir=$1 test -z $dir && dir=$defaultdir # find images # FEHLER: '"' an der falschen Stelle images=`find $dir -name "*.jpg"` # FEHLER: ';' fehlte if test -z "$images"; then echo "No images in $dir!" exit 2 fi # resize images # FEHLER: "do" fehlte for image in $images; do imgbase=`basename $image` # FEHLER: statt '#' sollte '%' verwendet werden newimage=${imgbase%.jpg}_small.jpg echo "$image -> $newimage" convert $image -resize $max_size $newimage done ========== 3.1.4 Shellskript: #!/bin/bash for file in $* do echo cp $file $file.bak done ========== AUFGABE 3.2 (Turingmaschine) ========== Z | Band ------------------------------------- A | (_) 1 1 1 _ 1 1 _ A | _ (1) 1 1 _ 1 1 _ B | _ 1 (1) 1 _ 1 1 _ B | _ 1 1 (1) _ 1 1 _ B | _ 1 1 1 (_) 1 1 _ C | _ 1 1 1 1 (1) 1 _ C | _ 1 1 1 1 1 (1) _ C | _ 1 1 1 1 1 1 (_) D | _ 1 1 1 1 1 (1) _ E | _ 1 1 1 1 (1) _ _ E | _ 1 1 1 (1) 1 _ _ E | _ 1 1 (1) 1 1 _ _ E | _ 1 (1) 1 1 1 _ _ E | _ (1) 1 1 1 1 _ _ E | (_) 1 1 1 1 1 _ _ S | _ (1) 1 1 1 1 _ _ Ergebnis: 5 in unärer Codierung. Das Programm addiert zwei unäre Zahlen. ========== AUFGABE 3.3 (Fleißiger Biber, optional) ========== state | read | write | move | next state ----------------------------------------