Gadget2
PC-Selbstbauer(in)
Hab die Aufgabe bekommen, ein Script zu schreiben, dass aus einer CSV-Datei unter Linux User und Gruppen anlegen kann.
Da ich nichts besseres gefunden habe, habe ich mir zum testen meine CSV-Datei in der Form von der /etc/passwd gebastelt.
Auf Funktion getestet ist jetzt bereits:
Was das Script halt noch nicht kann, ist prüfen, ob der User und die Nutzergruppe bereits in der /etc/passwd bzw. /etc/group vorhanden sind.
Meine Ideen bisher waren:
Die /etc/passwd zeilenweise einzulesen und jeweils den 1. Wert der Zeile in einen Array schreiben.
Der Array wird durchgegangen und wenn bis zum Ende kein entsprechender User vorhanden ist, wird einer angelegt:
Problem dabei ist, dass der Array noch nicht initialisiert ist, weil ich noch nicht herausgefunden habe, wie ich in Python einen leeren Array erzeuge. Die nächstbeste Lösung dafür wäre einen Standartarray mit einer Länge zu erzeugen, die gleich der Zeilenanzahl der /etc/passwd ist.
Das kommt mir aber alles unheimlich umständlich vor und geht sicherlich auch einfacher, kennt sich jemand damit aus?
Da ich nichts besseres gefunden habe, habe ich mir zum testen meine CSV-Datei in der Form von der /etc/passwd gebastelt.
Auf Funktion getestet ist jetzt bereits:
Code:
[B][COLOR="red"]#!/usr/bin/python
#-*- coding: utf-8 -*-
#version 1.5 vom 10.08.2013
#author: Nick Rauter[/B]
[B][COLOR="blue"]import[/B] os
[B][COLOR="red"]#CSV-Datei öffnen[/B]
dateivar = open([B][COLOR="#2e8b57"]"/home/nick/Dokumente/installation.csv"[/B], [B][COLOR="#2e8b57"]"r"[/B])
[B][COLOR="blue"]for[/B] zeile [B][COLOR="blue"]in[/B] dateivar:
liste = zeile[:-1].split([B][COLOR="#2e8b57"]":"[/B])
[B][COLOR="red"]#home-Verzeichnis anlegen[/B]
verzeichnis = [B][COLOR="#2e8b57"]"/home/"[/B]
pfad = verzeichnis + liste[0]
[B][COLOR="blue"]if not[/B] os.path.exists(pfad):
os.mkdir(pfad)
[B][COLOR="blue"]print[/B] [B][COLOR="#2e8b57"]"/home success"[/B]
[B][COLOR="red"]#passwd bearbeiten[/B]
passwd = open([B][COLOR="#2e8b57"]"/etc/passwd"[/B], [B][COLOR="#2e8b57"]"a"[/B])
passwd.write(liste[0] + [B][COLOR="#2e8b57"]":"[/B] + liste[1] + [B][COLOR="#2e8b57"]":"[/B] + liste[2] +[B][COLOR="#2e8b57"] ":"[/B] + liste[3] + [B][COLOR="#2e8b57"]":"[/B] + liste[4] + [B][COLOR="#2e8b57"]":"[/B] + liste[5] + [B][COLOR="#2e8b57"]":"[/B] + liste[6])
passwd.close()
[B][COLOR="blue"]print[/B] [B][COLOR="#2e8b57"]"passwd success"[/B]
[B][COLOR="red"]#group bearbeiten[/B]
group = open([B][COLOR="#2e8b57"]"/etc/group"[/B], [B][COLOR="#2e8b57"]"a"[/B])
group.write(liste[0] + [B][COLOR="#2e8b57"]":"[/B] + liste[3] + [B][COLOR="#2e8b57"]":"[/B])
group.close()
[B][COLOR="blue"]print[/B] [B][COLOR="#2e8b57"]"usergroup success"[/B]
dateivar.close()
Was das Script halt noch nicht kann, ist prüfen, ob der User und die Nutzergruppe bereits in der /etc/passwd bzw. /etc/group vorhanden sind.
Meine Ideen bisher waren:
Die /etc/passwd zeilenweise einzulesen und jeweils den 1. Wert der Zeile in einen Array schreiben.
Code:
passwd = open([B][COLOR="#2e8b57"]"/etc/passwd"[/B], [B][COLOR="#2e8b57"]"r"[/B])
zaehler = 0
[B][COLOR="blue"]for[/B] line [B][COLOR="blue"]in[/B] passwd:
pruefer = line.split([B][COLOR="#2e8b57"]":"[/B])
array[zaehler] = pruefer[0]
zaehler += 1
passwd.close()
Der Array wird durchgegangen und wenn bis zum Ende kein entsprechender User vorhanden ist, wird einer angelegt:
Code:
laenge = len(array)
i = 0
[B][COLOR="blue"]while[/B] i <= laenge [B][COLOR="blue"]and[/B] array[i] != liste[0]:
i += 1
[B][COLOR="blue"]if[/B] i == laenge:
passwd.write(liste[0] + [B][COLOR="#2e8b57"]":"[/B] + liste[1] + [B][COLOR="#2e8b57"]":"[/B] + liste[2] +[B][COLOR="#2e8b57"] ":"[/B] + liste[3] + [B][COLOR="#2e8b57"]":"[/B] + liste[4] + [B][COLOR="#2e8b57"]":"[/B] + liste[5] + [B][COLOR="#2e8b57"]":"[/B] + liste[6])
Problem dabei ist, dass der Array noch nicht initialisiert ist, weil ich noch nicht herausgefunden habe, wie ich in Python einen leeren Array erzeuge. Die nächstbeste Lösung dafür wäre einen Standartarray mit einer Länge zu erzeugen, die gleich der Zeilenanzahl der /etc/passwd ist.
Das kommt mir aber alles unheimlich umständlich vor und geht sicherlich auch einfacher, kennt sich jemand damit aus?