aktuelle.kurse/m122/moegliche-LB2-AufgabenProjekte/A_verzeichnisse-und-dateien-anlegen/README.md

201 lines
7.1 KiB
Markdown
Raw Normal View History

2023-02-13 21:55:24 +01:00
# M122 - Aufgabe
2024-02-23 11:23:19 +01:00
2024-02 MUH
2023-02-13 22:17:04 +01:00
2023-02-13 21:55:24 +01:00
## Dateien und Verzeichnisse anlegen
2023-02-15 13:43:15 +01:00
Als Lehrer habe ich den Bedarf, für alle Lernenden einer Klasse
dieselben Dateien zur Verfügung zu stellen. Sie können sich
auch vorstellen, Sie müssen für eine Anzahl ihrer Kollegen oder
Mitarbeiter einen Satz von gleichen Dateien bereitstellen.
2023-02-13 21:55:24 +01:00
2023-02-15 13:43:15 +01:00
In diesem Beispiel gibt mehrere Klassen. Jede Klasse bekommt ein Verzeichnis.
In diesem Klassenverzeichnis wird für jede Person ein weiteres
Verzeichnis angelegt. Das heisst, dass alle Lernenden ein eigenes Verzeichnis bekommen. Und in diesem Lernenden-Verzeichnis sollen
dann die gleichen Dateien zur Verfügung gestellt werden.
2023-02-13 21:55:24 +01:00
2023-06-26 09:53:39 +02:00
### Endresultat
2023-05-09 19:06:10 +02:00
2023-02-13 21:55:24 +01:00
Es soll nachher eine solche Struktur entstehen:
2023-06-26 10:34:29 +02:00
gen/M122-AP22b
2023-02-13 21:55:24 +01:00
Amherd
Datei-1.txt
Datei-2.docx
Datei-3.pdf
2023-06-26 09:53:39 +02:00
Baume
2023-02-13 21:55:24 +01:00
Datei-1.txt
Datei-2.docx
Datei-3.pdf
2023-06-26 09:53:39 +02:00
Keller
Datei-1.txt
Datei-2.docx
Datei-3.pdf
usw.
2023-06-26 10:34:29 +02:00
gen/M122-AP22c
2023-06-26 09:53:39 +02:00
Arslan
Datei-1.txt
Datei-2.docx
Datei-3.pdf
Buehler
Datei-1.txt
Datei-2.docx
Datei-3.pdf
Camenisch
2023-02-13 21:55:24 +01:00
Datei-1.txt
Datei-2.docx
Datei-3.pdf
usw.
2023-06-26 09:53:39 +02:00
### Vorgehen
2023-02-13 21:55:24 +01:00
2023-06-26 09:53:39 +02:00
Sie erstellen 2 Skripts:
2023-06-26 10:31:47 +02:00
2023-06-26 09:53:39 +02:00
#### Teil 1 "erstelleVorlagen.sh"
für die Erstellung des Templateverzeichnis wo nachher mind. 3 Dateien drin stehen und mind. 3 Klassen-Dateien mit einer Liste von mind. 12 Schüler:innen-Nachnamen
2023-06-26 10:31:47 +02:00
- Machen Sie ein erstes Skript mit dem Namen `erstelleVorlagen.sh`
und machen Sie das Skript ausführbar (executable)
mit `chmod +x erstelleVorlagen.sh`
- Die erste Zeile im Skript enthält `#!/bin/bash`
- Entwickeln Sie nun Ihren Code der folgendes macht:
- Erzeuge Directory "_templates"
- Erstellen Sie in diesem Directory mindestens 3 Dateien
(z.B. datei-1.txt, datei-2.pdf, datei-3.doc)
- Erzeuge Directory "_schulklassen"
- Erstellen Sie in diesem Directory mindestens 2 Schulklassen-Dateien
z.B. M122-AP22b.txt, M122-AP22c.txt, M122-AP22d.txt
- Lassen Sie in jede Schulklassen-Datei mind. 12 Schüler-Namen reinschreiben
2023-06-26 09:53:39 +02:00
![aufgabeA_erstelleVorlagen.jpg](x_ressources/aufgabeA_erstelleVorlagen.jpg)
2023-06-26 10:26:12 +02:00
#### Teil 2 "verteileDateien.sh"
2023-06-26 09:53:39 +02:00
2023-06-26 10:26:12 +02:00
Das Skript aus Teil 1 ist die Vorgabe für dieses Skript Teil 2.
Es geht nun um die Verarbeitung der Klassen-Dateien und die
Verteilung der Dateien.
2023-02-15 13:43:15 +01:00
2023-06-26 10:31:47 +02:00
- Machen Sie ein Skript mit dem Namen `verteileDateien.sh` und
2023-06-26 10:34:29 +02:00
machen Sie das Skript ausführbar (executable) mit `chmod +x verteileDateien.sh`
2023-06-26 10:31:47 +02:00
- Die erste Zeile im Skript enthält `#!/bin/bash`
- Entwickeln Sie nun Ihren Code der folgendes macht:
- Lesen Sie alle Dateien aus "_schulklassen" und erstellen Sie für jede
2023-06-26 10:34:29 +02:00
angetroffene Datei ein Directory mit dem Namen der Datei, jedoch ohne
die Datei-Endung `.txt`
2023-06-26 10:31:47 +02:00
(es wird also für jede Klasse ein Directory erstellt).
- Lesen Sie für jede Datei (=Klasse) die Inhalte (=Schülernamen)
aus und erstellen Sie für jede Zeile ein Directory
(=pro Schülername ein Directory)
- Kopieren Sie alles was in `_templates` steht zu diesem neu
erstellen Schüler-Directory
2023-06-26 10:26:12 +02:00
![aufgabeA_verteileDateien.jpg](x_ressources/aufgabeA_verteileDateien.jpg)
2023-02-13 21:55:24 +01:00
2023-02-15 13:43:15 +01:00
<hr>
2023-02-15 14:33:51 +01:00
**Allgemeines:**
2023-02-15 13:43:15 +01:00
Sie sollten grundsätzlich selber versuchen, Ihre eigene
Lösung zu finden. Sie können sich gerne auch mit jemandem
zusammenzutun um zusammen zu forschen, nachzudenken und um
2023-02-15 14:20:23 +01:00
die ersten Schritte gemeinsam zu machen. Aber jede:r Lernende
gibt die eigene Lösung ab.
2023-02-15 13:43:15 +01:00
Sie haben in den letzten Wochen **bash** gelernt. Die Idee
ist, dass nun mit dieser Skriptsprache die Lösung erarbeiten.
Wenn Sie gefitzt sind, werden Sie vielleicht auch eine
einfachere und schnellere Lösung in **bash** finden.
2023-02-15 14:20:23 +01:00
**_beachten Sie:_**
**Bash** hat nicht die gleichen Möglichkeiten wie PowerShell.
2024-02-23 11:22:39 +01:00
Manches ist einfacher und manches weniger einfach zu
machen. Jede Skript-Programmiersprache hat ihre Vor- und Nachteile.
2023-02-15 13:43:15 +01:00
2023-02-15 14:20:23 +01:00
Und was auch nicht zu vernachlässigen ist, ist dass **bash** auf
2024-02-23 11:22:39 +01:00
jedem Linux-System ohne etwas zu installieren schon verfügbar ist!
2023-02-15 14:20:23 +01:00
Sie können immer davon ausgehen, dass Sie Ihr Linux-Bash-Skript
2024-02-23 11:22:39 +01:00
sofort auf einem fremden System verwenden können. Das ist in der
2023-02-15 14:20:23 +01:00
Praxis ein **Riesen-Vorteil**!
2023-02-15 13:43:15 +01:00
2023-02-13 21:55:24 +01:00
2023-02-15 13:43:15 +01:00
### Mögliche Strategie und Lösung in PowerShell
2023-02-13 21:55:24 +01:00
2023-02-15 14:20:23 +01:00
Damit Sie einmal einen Einblick bekommen, ist hier in der
Folge die gleiche Aufgabe in **PowerShell** programmiert
worden. Da es in PowerShell andere Möglichkeiten gibt,
können Sie nicht alles gleich machen. Aber die Strategie,
was zu machen ist, können Sie vielleicht, zumindest teilweise,
übernehmen.
2023-02-15 14:39:40 +01:00
- Hilfestellung für Teil 1
2023-02-15 14:50:32 +01:00
Mögliche Lösung: [in Powershell](loesung-in-powershell/prepareTemplate.ps1)
2023-02-15 14:39:40 +01:00
- Hilfestellung für Teil 2
2023-02-15 14:20:23 +01:00
1.) Das Skript muss zuerst den Dateinamen
(vor dem Punkt) lesen um damit das Grundverzeichnis
(das der Klasse) anzulegen. Diesen verwendeten Namen sollte
gespeichert werde, weil er vermutlich wieder verwendet
werden wird.
2023-02-13 21:55:24 +01:00
2023-02-15 13:43:15 +01:00
2.) Dann muss das Skript die Datei öffnen und alle Namenseinträge
herauslesen.
2023-02-13 21:55:24 +01:00
2023-02-15 13:43:15 +01:00
3.) Die Namen sind in einer Liste notiert. Die können gleich
2023-02-15 14:20:23 +01:00
als "array" eingelesen und nachher so verwendet werden.
2023-02-13 21:55:24 +01:00
2023-02-15 13:43:15 +01:00
Es gibt Möglichkeiten, die oben beiden Schritte in einem
einzigen Befehl zu machen um gleichzeitig den Inhalt einer
Datei direkt einer Programm-Variablen zuzuweisen und um den
nächsten Schritt gleich damit zu machen.
2023-02-13 21:55:24 +01:00
2023-02-15 13:43:15 +01:00
4.) Mit jedem (Namens-)Eintrag muss man erstens ein
Verzeichnis erstellen und zweitens die Dateien aus dem
"Template"-Verzeichnis hinein zu kopieren.
2023-02-13 21:55:24 +01:00
- [./loesung-in-powershell/einstieg-prepareFiles-01.ps1](./loesung-in-powershell/einstieg-prepareFiles-01.ps1)
- [./loesung-in-powershell/einstieg-prepareFiles-02.ps1](./loesung-in-powershell/einstieg-prepareFiles-02.ps1)
- [./loesung-in-powershell/einstieg-prepareFiles-03.ps1](./loesung-in-powershell/einstieg-prepareFiles-03.ps1)
- [./loesung-in-powershell/einstieg-prepareFiles-04.ps1](./loesung-in-powershell/einstieg-prepareFiles-04.ps1)
- [./loesung-in-powershell/einstieg-prepareFiles-05.ps1](./loesung-in-powershell/einstieg-prepareFiles-05.ps1)
- [./loesung-in-powershell/einstieg-prepareFiles-06.ps1](./loesung-in-powershell/einstieg-prepareFiles-06.ps1)
- [./loesung-in-powershell/einstieg-prepareFiles-07.ps1](./loesung-in-powershell/einstieg-prepareFiles-07.ps1)
2023-02-15 14:50:32 +01:00
2023-02-15 21:29:13 +01:00
Das fertige Skript: [./loesung-in-powershell/prepareFiles.ps1](./loesung-in-powershell/prepareFiles.ps1)
<hr>
## Bewertung
2023-07-22 22:59:12 +02:00
| Stufe | Punkte |Beschreibung |
|-------|--------|------------ |
| 1 | 1 | "Skript erstelleVorlagen.sh:" Erstellung Namensdateien (mind. 2) |
| 2 | 1 | "Skript erstelleVorlagen.sh:" Erstellung der Dateien im Template-Verzeichnis |
| - | - | |
| 3 | 1 | "Skript verteileDateien.sh:" Klassenverzeichnis wird angelegt |
| 4 | 1 | "Skript verteileDateien.sh:" Lernendenverzeichnisse werden angelegt |
| 5 | 1 | "Skript verteileDateien.sh:" Lernendenverzeichnisse haben die Dateien drin |
| 6 | 1 | "Skript verteileDateien.sh:" Mehrere Klassen- und Lernenden-Verzeichnisse |
| | **6** | **Total** |
| | | |
2023-07-23 00:10:36 +02:00
| |**1/2** | Halbierung der Punkte, wenn der gleiche Code schon mal (bei einem Kollegen) gesehen wurde |
2023-07-22 22:59:12 +02:00
| | | |
2023-02-15 21:29:13 +01:00