Hallo,
ein wesentliches, noch aus Unix-Zeiten übernommenes Konzept in Linux ist, dass man versucht, Aufgaben, für die es bereits sinnvolle Werkzeuge oder Werkzeugkombinationen gibt, möglichst nicht noch einmal durch eingebaute Funktionen nachzubilden. Die Kommandozeilentools von UCS haben keinen Import-CSV Schalter. Das brauchen sie auch nicht.
Das Beispiel im angeführten SDB-Artikel erklärt den Weg exemplatisch für die Erzeugung von Freigaben.
In unsere Werkzeugkiste gehören:
- “cat” zum Anzeigen von Dateien
- “while … do …done” zum Verarbeiten der Datensätze und -felder
- “udm” das Univention Kommandozeilentool, siehe auch Doku: 4.8.2. Example invocations of the command line interface
Angenommen, wir haben folgende CSV mit den Feldern UID, Vorname, Nachname und SMTP-Adresse:
root@master:~# cat users.csv
johnd;John;Doe;john.doe@example.com
janed;Jane;Doe;jane.doe@example.com
Die Besonderheit hier ist der Feldtrenner (internal field separator oder kurz IFS). Das Semikolon wir in der Shell als Befehlstrenner benutzt. Deshalb müssen wir es gesondert behandeln.
Das folgende Codebeispiel liest die Datei, holt sich für jeden Datensatz die Felder in 4 einzelne Variablen, zeigt aber nur die letzte an:
root@master:~# cat users.csv | while IFS=\; read uid first last mail; do echo $mail; done
john.doe@example.com
jane.doe@example.com
Das muss man jetzt nur noch mit einem udm Befehl verknüpfen:
cat users.csv | while IFS=\; read uid first last mail
do
univention-directory-manager users/user create \
--position "cn=users,dc=example,dc=com" \
--set username=$uid \
--set firstname=$first \
--set lastname=$last \
--set mailPrimaryAddress=$mail \
--set password="secretpassword"
done
Ich hoffe, dass Ihnen dieses Beispiel weiterhilft.
Viele Grüße,
Dirk Ahrnke