Docsity
Docsity

Prüfungen vorbereiten
Prüfungen vorbereiten

Besser lernen dank der zahlreichen Ressourcen auf Docsity


Download-Punkte bekommen.
Download-Punkte bekommen.

Heimse Punkte ein, indem du anderen Studierenden hilfst oder erwirb Punkte mit einem Premium-Abo


Leitfäden und Tipps
Leitfäden und Tipps

Lösungshinweise Grundlagen der Bash-Programmierung-Wirtschaftsinformatik II, Übungen von Wirtschaftsinformatik

Lösungen zu den Übungen zur Bash-Programmierung im Kurs Wirtschaftsinformatik II, Prof. Mandl, Sommersemester 2020

Art: Übungen

2019/2020
Sonderangebot
30 Punkte
Discount

Zeitlich begrenztes Angebot


Hochgeladen am 18.05.2020

Alexa_Schlabohm
Alexa_Schlabohm 🇩🇪

4.5

(10)

1 / 21

Toggle sidebar

Diese Seite wird in der Vorschau nicht angezeigt

Lass dir nichts Wichtiges entgehen!

bg1
Grundlagen der Bash-
Programmierung
Begleitmaterial zu den Übungen
im Kurs Wirtschaftsinformatik II
Lösungshinweise
Bachelorstudium Wirtschaftsinformatik
Sommersemester 2020
Prof. Dr. Peter Mandl, Björn Rottmüller, M. Sc.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
Discount

Sonderangebot

Unvollständige Textvorschau

Nur auf Docsity: Lade Lösungshinweise Grundlagen der Bash-Programmierung-Wirtschaftsinformatik II und mehr Übungen als PDF für Wirtschaftsinformatik herunter!

Grundlagen der Bash-

Programmierung

Begleitmaterial zu den Übungen

im Kurs Wirtschaftsinformatik II

Lösungshinweise

Bachelorstudium Wirtschaftsinformatik

Sommersemester 20 20

Prof. Dr. Peter Mandl, Björn Rottmüller, M. Sc.

Lösungen zu Kapitel 2

Übung 2 .8.4 zum Anlegen Anlegen von Umgebungsvariablen

Betrachten Sie sich mit dem Kommando env bzw. printenv oder auch set die in Ihrer Bash-Session vorhandenen Umgebungsvariablen und machen Sie sich einige Notizen dazu. Erzeugen Sie eine eigene Umgebungsvariable, die Ihren Namen hat und weisen Sie einen beliebigen Wert zu. Führen Sie das Kommando env, printenv oder set erneut aus und suchen Sie nun in der Ausgabe nach Ihrer Umgebungsvariablen. env und printenv zeigen alle exportierten Umgebungsvariablen an. set zeigt zusätzlich noch die nicht exportierten Umgebungsvariablen und auch definierte Shell-Funktionen an. Neue Variable anlegen: MANDL=“Peter Mandl“ Neue Variable wird nur mit set-Kommando angezeigt.

Übung 2.8.5 zum Kommando declare

Erzeugen Sie mit dem Kommando declare eine Umgebungsvariable mit dem Namen i1 vom Typ Integer und weisen ihr den Wert 1350 zu. Erzeugen Sie eine zweite Umgebungsvariable i2 vom gleichen Typ und weisen Sie ihr den Wert von i1 zu. Zeigen Sie die neuen Umgebungsvariablen auf der Konsole an und löschen Sie diese anschließend wieder. declare – i i1= declare – i i2=$i Anzeigen mit declare - i oder echo $i1 $i Löschen mit: unset i unset i

Lösungen zu Kapitel 3

Übung 3.7.1 Kommando-Historie

Lassen Sie sich die Kommando-Historie in Ihrer Bash-Session ausgeben und versu- chen Sie einige Befehle aus der Historie aufzurufen. Löschen Sie danach die Kom- mandos-Historie und geben Sie nochmals das Kommando history ein. Notieren Sie sich wichtige Aspekte. Das Kommando „history“ eingeben liefert die Historie der schon eingegebenen Befehle. Das Kommando „history – c“ löscht die komplette History der aktuellen Session. Über ein „!“ gefolgt von einer positiven oder negativen Zahl können Befehle erneut ausge- führt werden. !10 führt das 10. Kommando in der Historie aus. !-10 führt das zehntletzte Kommando nochmals aus. !- 1 führt das letzte Kommando aus Möchte man die History auch über die Session hinweg löschen, gibt man zusätzlich das Kommando „history – w“ ein. Hier wird die Datei, in der die History abgespeichert wird, gelöscht.

Übung 3.7.2 Datei- und Verzeichnisbearbeitung

  1. In welchem Verzeichnis befinden Sie sich gerade? Es müsste das Heimatverzeichnis der eigenen Kennung sein. Erfragt kann es mit dem Kommando „pwd“ werden.
  2. Lassen Sie sich den Inhalt des aktuellen Verzeichnisses anzeigen. Das Kommando „ls“ oder „ls – la“ führt zum Ergebnis. Evtl. auch versteckte Dateien, wel- che durch einen vorangestellten „Punkt“ wie „.bashrc“ zu erkennen sind.
  3. Erzeugen Sie im Home-Verzeichnis die Dateien f1.txt, f2.txt und f3.txt touch f1.txt f2.txt f3.txt (oder mit regulärem Ausdruck) Legen Sie im Home-Verzeichnis ein Verzeichnis mit dem Namen „ue- bung_winf“ an. Nachdem Sie den Befehl mkdir ausgeführt haben, lassen Sie sich mit ls den Inhalt des aktuellen Verzeichnisses anzeigen. Der Ordner „ue- bung_winf“ müsste nun angezeigt werden. mkdir uebung_winf

ls

  1. Wechseln Sie in das von Ihnen erstellte Verzeichnis „uebung_winf“. Lassen Sie sich mit ls den Inhalt anzeigen. cd uebung_winf ls
  2. Löschen Sie das Übungsverzeichnis. cd .. rmdir uebung_winf
  3. Sie sollten sich jetzt im HOME-Verzeichnis befinden. Erzeugen Sie mit Hilfe des Befehls echo > test.txt oder touch test.txt eine neue Datei. Bleiben Sie im Home-Verzeichnis. Erstellen Sie mit cp ein paar Kopien der erstellten Datei. Geben Sie diesen Dateien die Namen test_1.txt, test_2.txt, test_3.txt, etc. cp test.txt test_1.txt cp test.txt test_2.txt cp test.txt test_3.txt
  4. Versuchen Sie nun alle Dateien, die mit „test“ beginnen und als Dateiendung „.txt“ besitzen, in ein neues Verzeichnis zu kopieren. Evtl. muss vorher ein an- derer Befehl abgesetzt werden. mkdir neues-dir cp test?.txt neues-dir
  5. Lassen Sie sich die eine beliebige Datei mit Hilfe des cat-Befehls anzeigen. Wie sieht die Ausgabe aus? cat Es wird der binäre Inhalt der Datei angezeigt. In der ersten Zeile steht zumindest bei PDF Dokumenten die Versionsnummer. „%PDF 1.4“
  6. Verschieben Sie mit dem Move-Befehl alle Dateien mit der Endung „.txt“ in das Verzeichnis mit dem Namen „uebung_winf2“. mkdir uebung_winf mv *.txt uebung_winf
  7. Wechseln Sie nun in das Verzeichnis uebung_winf und benennen Sie die Da- tei „test.txt“ in „test0.txt“ um. Hinweis: Verzeichnis uebung_winf erneut anlegen, falls schon gelöscht (Aufgabe 6) mkdir uebung_wiinf

Lösungen zu Kapitel 4

Übung 4. 4 .1 zum Berechtigungskonzept

Erzeugen Sie mit dem touch-Befehl eine neue Datei in Ihrem Home-Verzeichnis und lassen Sie sich anschließend mittels ls-Befehl die Berechtigungsinformationen dazu anzeigen. cd touch neue-datei ls – la oder ls Ändern sie nun die Berechtigung für diese Datei auf r--r--r--. Versuchen Sie an- schließend den Inhalt der Datei zu ändern (am einfachsten über einen Editor). Was passiert und warum? chmod 444 neue-datei vi neue-datei Editieren der Datei und diese mit vi-Kommando ESC :wq versuchen zu speichern. Es wird eine Fehlermeldung ausgegeben, die besagt, dass die Berechtigung nicht gegeben ist. Dies leigt an den der vorher festgelegten Berechtigungen, die nur das Lesen und nicht das Verändern der Datei erlauben. Füllen Sie in der folgenden Tabelle die fehlenden Lücken aus! Befehl Binär Anzeige bei ls - l chmod 440 100 100 000 r--r---- chmod 571 101 111 001 r-xrwx--x chmod 027 000 010 111 ----w-rwx chmod 220 010 010 000 - w--w----

Übung 4.4.2 mit umask

Setzen Sie die Berechtigungsmaske mit dem umask-Kommando so, dass der Eigen- tümer lesen und schreiben darf, die Gruppe nur lesen und anderen gar nichts er- laubt ist.

Erzeugen Sie nun eine beliebige neue Datei und betrachten Sie deren Zugriffsrech- te mit dem ls-Kommando. umask 026 oder umask 027 oder umask u=rw,g=r,o= touch noch-eine-datei ls – al noch-eine-datei Die Zugriffsrechte - rw-r----- werden für die Datei mit dem Namen „noch-eine-datei“ ange- zeigt.

Übung 4.4.3 .bashrc verändern

Ändern Sie nun die Datei .bashrc in Ihrem Home-Verzeichnis so ab, dass bei jedem Start eines Terminals ein Begrüßungstext und der Inhalt Ihres Home- Verzeichnisses ausgegeben wird. cd In die Datei .bashrc im Homeverzeichnis (siehe $HOME) die folgenden Zeilen z.B. mit dem einfügen: echo Hallo Student, viel Spass weiterhin in der Uebung ls Schreiben in die Datei geht so (später nutzen wir einen Editor wie den vi): echo - e “echo Hallo Student, viel Spass weiterhin in der Uebung \nls“ > .bashrc Hinweise:

  • Option - e bewirkt, dass \n als Steuerzeichen erkannt wird. \n führt einen Zeilen- wechsel aus.
  • Backslash unter macOS: alt-Taste (=option) und gleichzetiig Umschalttaste ge-

drückt halten und Y-Taste betätigen à \

Das Kommando läuft nun im Hintergrund und ist nicht mehr der Terminalgruppe zuge- ordnet. Wenn Sie nun die Bash und auch die Login-Shell beenden und sich anschließend innerhalb von 1000 ms (siehe sleep 1000) wieder einloggen, sehen Sie mit dem Kommando „ps aux | grep sleep“ auch den sleep-Prozess, der nun nicht mehr in der Terminalgruppe hängt (zu erkennen am Fragezeichen in der TTY-Spalte).

Übung 5.5.4 zum Beenden eines Prozesses

Starten Sie eine neue Bash und beenden Sie anschließend den Bash-Prozess aus einem anderen Terminal heraus. PID der alten Bash mit ps-Kommando herausfinden: ps – ef kill Öffnen Sie ein Terminal und geben Sie den Befehl wc ein. Öffnen Sie ein zweites Terminal und versuchen Sie herauszubekommen, welche PID der wc-Prozess be- sitzt. Beenden Sie nun das wc-Programm des anderen Terminals mit Hilfe des kill-Kommandos. wc

  1. Terminal starten PID herausfinden: ps – ef Task beenden: kill

Lösungen zu Kapitel 6

Übung 6.9.1 Erstes Bash-Skript

Legen Sie eine Datei mit dem einfachen Beispiel-Skript von oben ´(”Servus Li- nux!”) als Inhalt an und bringen Sie es zum Ablauf. Notieren Sie die erforderli- chen Aktionen, um das Programm zum Ablauf zu bringen. vi servus.sh Folgende Zeilen eintragen: #!/bin/bash echo “Servus Linux!“ Datei sichern und vi beenden mit ESC :wq Datei ausführbar machen „chmod +x servus.sh“ und danach mit „./servus.sh“ ausführen.

Übung 6.9. 2 zur Parameterübergabe

Schreiben Sie ein einfaches Bash-Skript, in dem Sie zwei Parameter übergeben und im Skript auf dem Bildschirm ausgeben. Bringen Sie das Skript zum Laufen. #!/bin/bash if [ $# - eq 2 ]; then echo “Sie haben zwei Parameter angegeben:“ echo „Parameter 1: $1“ echo „Parameter 2: $2“ echo „keine weiteren Parameter vorhanden“ else echo “Bitte zwei Parameter uebergeben!“ fi

Übung 6.9. 3 zum Debugging von Bash-Skripts

Ein weiterer hilfreicher Befehl lautet bash - x . Informieren Sie sich, was dieser macht und testen Sie ihn anhand Ihres zuvor erstellten Skripts.

echo "Bitte nur 5 Parameter angeben" fi Alternative 1: #!/bin/sh if [ $# - le 5 ]; then for (( i=$#; i>0; --i )) do if test ${!i} == 1 - o ${!i} == 2; then echo "Wert ist ${!i}" fi done fi Ergänzung: Das ginge auch mit While-Schleife #!/bin/sh if [ $# - le 5 ]; then while test $# - gt 0 do if [ $1 == 1 - o $1 == 2 ]; then echo "Wert ist $1" fi shift done fi

Übung 6.9.6 mit while-Schleife

Schreiben Sie ein kleines Bash-Script, das in einer while-Schleife einen Zähler von 1 bis 20 zählt und jeweils den aktuellen Zählerwert auf den Bildschirm ausgibt. #!/bin/bash COUNT= while [ $COUNT – le 20 ] do

echo “Zähler: $COUNT“ COUNT=expr $COUNT + 1 done Alternative zum Hochzählen: COUNT=$((COUNT + 1))

Übung 6.9.7 Bash-Skript zum Bewegen von Dateien

Entwickeln Sie ein Bash-Skript, mit dem Dateinamen mvprot.sh. Es soll im aktu- ell gewählten Verzeichnis alle Dateien mit der angegebenen Endung in ein neu erstelltes Unterverzeichnis verschieben und die Anzahl der verschobenen Dateien sowie deren Namen – falls gewünscht – in eine Protokolldatei im Quellverzeichnis schreiben. Das Skript besitzt also die drei Parameter Dateiendung, Name des Unter- verzeichnisses und ein Flag für die Auswahl, ob ein Protokoll über den Vorgang erstellt werden soll. Zum Entwickeln und Testen Ihrer Lösung legen Sie sich bitte ein neues Verzeichnis mit einigen Testdateien an. #!/bin/bash #Protokollierung if [ "$3" = "J" ] ; then ls *.$1 | wc – w > mvprot.log echo “Dateien in $2 verschoben.” ls *.$1 > mvprot.log fi mkdir $ mv *.$1 $

Übung 6.9. 8 Bash-Skript zum Bewegen von Dateien (Erweiterung)

Versuchen Sie nun, Ihr Shell-Skript so zu erweitern, dass eine Prüfung der überge- benen Parameter stattfindet. Zudem soll überprüft werden, ob das zu erstellende Verzeichnis bereits existiert. In diesem Fall soll dem Anwender eine entsprechende Fehlermeldung ausgegeben werden Ferner ist gefordert, eine Hilfefunktion zu implementieren, die eine kurze Be- schreibung des Programms und der möglichen Parameter liefert. Als dritte Erwei- terung soll überprüft werden, ob Dateien mit der übergebenen Änderung existie-

echo "Defaultwert=N" protokollierung="N" fi #Überpruefung ob Verzeichnis bereits vorhanden if [ - d $verzeichnis ] ; then echo "Verzeichnis $verzeichnis vorhanden" else echo "Verzeichnis $verzeichnis noch nicht vorhanden --> wird erstellt" mkdir $verzeichnis fi #Ermittlung der Anzahl der zu verschiebenden Dateien anzahl=$(ls .$dateiendung | wc - w) if [ $anzahl - eq 0 ] ; then echo "Keine Dateien mit Endung $dateiendung zu verschieben" exit 2 fi #Protokollierung if [ $protokollierung = "J" ] || [ $protokollierung = "Y" ] ; then echo "Anzahl Dateien nach $verzeichnis verschoben: $anzahl" > $protokoll echo "Dateien: " >> $protokoll ls .$dateiendung >> $protokoll fi #Dateien werden verschoben mv .$dateiendung $verzeichnis echo " Programm erfolgreich beendet! ***" exit 0

Übung 6.9. 9 Übung zum Übersetzen und Ausführen von Java-

Programmen

Hinweis. Diese Übung ist für Fortgeschrittene gedacht und optional! Erweitern Sie das vorgegebene Bash-Skript, welches das zu den Übungen beigeleg- te Java-Programm Fakultaet.java zur Berechnung von Fakultäten übersetzt, ein Jar-File mit der Klasse Fakultaet.class erzeugt und anschließend das Pro- gramm aus der Jar-File heraus startet. Alle Fehlersituationen sind abzufangen und entsprechend mit Meldungen zu kommentieren. Bitte beachten Sie, dass Sie so-

wohl bei der Übersetzung als auch beim späteren Starten des Programms noch Fremdbibliotheken benötigen. Das Java-Programm erwartet eine Zahl x, mit 0 ≤ x ≤ 20 , als Eingabeparameter. Der benötigte Eingabeparameter für das Programm ist im Skript einzulesen und auf Plausibilität zu prüfen. Nur wenn der eingegebene Wert korrekt ist, darf das Java-Programm aufgerufen werden. Nutzen Sie in Ihrem Skript die bereits vorhandenen Bash-Funktionen. Sie können auch Bash-Befehle nutzen, die im Skriptum nicht besprochen wurden. Im Bash-Skript sind die evtl. benötigten Umgebungsvariablen JAVA_HOME, CLASSPATH und PATH geeignet zu belegen. Prüfen Sie die Returnwerte der aufgerufenen Programme javac und jar und geben Sie je nach Erfolgs- oder Fehlerfall folgende Exit-Codes zurück:

  • 0: Erfolgreiche Verarbeitung
  • 1: Übersetzungsfehler
  • 2: Fehler beim Erzeugen der Jar-File
  • 3: Fehler bei der Parametereingabe Überlegen Sie sich vor Beginn der Programmierung den Ablauf und skizzieren Sie ihn in einem Ablaufdiagramm oder in Pseudocode-Notation. Verwenden Sie zum Programmieren einen Linux-Editor wie z.B. vi oder emacs (siehe Anhang). Versehen Sie das Bash-Skript direkt im Sourcecode mit entspre- chender Dokumentation. Testen Sie das Skript unter Nutzung geeigneter Testfälle (richtige und auch fehlerhafte Eingaben prüfen). Dies ist eine mögliche Lösung: #!/bin/bash SRC_DIR="src" JAVA_SRC_DIR="${SRC_DIR}/main/java" SRC_FILES="sources.txt" BIN_DIR="bin" TMP_DIR="tmp" RES_SRC_DIR="${SRC_DIR}/main/resources" MANIFEST_FILE="${RES_SRC_DIR}/META-INF/MANIFEST.MF" LIB_DIR="lib" LOGS_DIR="logs" JAR_FILE_NAME="WInfoJavaExample" CLASSPATH=""

function, which does the compile process

function compile_code() { if [! - d ${BIN_DIR} ]; then mkdir ${BIN_DIR} fi javac - d ${BIN_DIR}/ - sourcepath ${JAVA_SRC_DIR}/ @${SRC_FILES} }

command for creating runable JAR file

function make_jar_file() { jar cvfm ../${JAR_FILE_NAME}.jar ../${MANIFEST_FILE} * RET_VAL=${?} if [ ${RET_VAL} - ne 0 ]; then echo "Error during JAR Create Process. Check Code or Dependencies and run Script again!" exit 2 fi }

function, for the preparations before JAR create process

function prepare_and_make_jar() { if [! - d ${TMP_DIR} ]; then mkdir ${TMP_DIR} fi cp - r ${BIN_DIR}/* ${TMP_DIR} cp - r ${RES_SRC_DIR}/* ${TMP_DIR} cd ${TMP_DIR} make_jar_file cd .. }

cleans up the directories

function cleanup() { rm - rf ${BIN_DIR} rm - rf ${TMP_DIR} rm - rf ${LOGS_DIR}

rm ${JAR_FILE_NAME}.jar rm ${SRC_FILES} } echo "Shell Script to compile JAVA Source Files to Byte Code and make JAR File" check_needed_progs echo "" echo "Find Source Files" find_source_files cat ${SRC_FILES} echo "" echo "compile Code" set_classpath compile_code RET_VAL=${?} if [ ${RET_VAL} - ne 0 ]; then echo "Error during Compile Process. Check Code and run Script again!" exit 1 fi echo "" echo "Do preparations and make JAR File" prepare_and_make_jar unset CLASSPATH echo "" echo "" echo "" echo "****** Faculty calculation ******" if [ - e "${JAR_FILE_NAME}.jar" ]; then

Enter Parameter for Faculty calculation

read - p "Please enter a Number x 0 <= x <= 20 for Faculty calculation: " NUMBER

Inputcheck: If the input is a number, and, if so, this is in the range of values?

echo "Eingegebene Zahl: ${NUMBER}"