Mit PERL-Skript auf Linux User anlegen

  • Hallo Zusammen


    In der Schule müssen wir eine Arbeit machen (die benotet wird), wo wir mit einem PERL-Skript User aus einer Datei auslesen und anlegen sollen. Ausserdem soll jeder User ein Homeverzeichnis erhalten.


    Ausserdem sollen wir ein Skript basteln, dass alle User in einer Liste löscht - mit Rückfrage auch, ob das Homeverzeichnis gelöscht werden soll.


    Das absolut tolle daran:
    Wir hatten in der Schule NULL Lektionen Theorie zu PERL, noch hatten wir bisher je etwas mit PERL gemacht. Wir haben einfach den Auftrag bekommen, für welchen wir jetzt 2 Wochen Zeit haben und welcher benotet wird.


    Die User-Liste soll so aussehen:
    Loginname, Gruppenname, Vorname, Nachname


    Wenn die Gruppe nicht bereits existiert, soll sie angelegt werden.


    Sonstige Anforderungen:
    Für alle User wird ein Standardpasswort vergeben, dieses kann also als Variable im PERL Skript festgelegt werden.
    Alle Home-Verzeichnisse werden in einem Verzeichnis angelegt, welches im Skript angegeben wird. Wird nichts angegeben, soll ein Standardpfad existieren.



    Nach paar Stunden Googlen und herumbasteln sieht mein Skript nun so aus:
    _________________________________________________________________________


    #!/usr/bin/perl -w
    #
    # Autor:
    # Datum: 18.05.2016
    # Version: 1.0
    #
    # ***********************************************************
    # * Dieses Skript erstellt User und fügt sie Gruppen hinzu. *
    # * Wenn die Gruppen nicht existieren, werden sie erstellt. *
    # ***********************************************************
    my $skriptpfad = "/home/manuel/Dokumente/users-to-create.txt";
    my $passwort = "Passwort123";




    open (DATEI, $skriptpfad) or die $!;
    @Benutzerzeile = <DATEI>; #Array wird in die Datei geschrieben
    print @Benutzerzeile, "\n";
    close (DATEI);


    _________________________________________________________________________



    Im Moment kann ich die Datei auslesen und in der Konsole ausgeben.


    Kann mir jemand, der PERL kann, helfen, wie ich dieses Skript schreiben kann?
    Wie gesagt, wir hatten NULL Stunden Theorie zur PERL.


    Gruss

    Freundliche Grüsse
    electroman


    Informatiker in Ausbildung ab Sommer 2013

  • Muss es Perl sein? :gap
    Python eignet sich für solche Scripts wesentlich besser, Stichwort os-Modul.

    plex@truenas: i7-9700, 64GB DDR4 RAM, 18*10TB, 4TB NVMe

    mobile@osx: Macbook Air M1

    desktop@win11: Ryzen 5700G@4.4GHz, 64 GB DDR4, RTX 3070 8GB, 16TB HDD, 8TB SATA SSD, 2TB NVMe

  • Perl ist tatsächlich etwas eigenwillig was Syntax angeht. Wenn Du nicht stundenlang online Material suchen willst würde ich Dir empfehlen ein Buch anzuschaffen, z.B. das da: Einführung in Perl. Damit solltest Du relativ schnell in die Gänge kommen.


    Für Manipulationen an Strings ist Perl grossartig und der Umgang mit regulären Ausdrücken dürfte wohl ungeschlagen sein, sprich das ist sicher eine Sprache die es sich lohnt einmal anzuschauen.

    Lian-Li PC-V1100B / Eizo FlexScan S2133 x 2 / Intel Core 2 Duo E7400 / Asus P5Q / Asus STRIX R7 370

  • Zitat

    Original von cockroach
    Perl ist tatsächlich etwas eigenwillig was Syntax angeht. Wenn Du nicht stundenlang online Material suchen willst würde ich Dir empfehlen ein Buch anzuschaffen, z.B. das da: Einführung in Perl. Damit solltest Du relativ schnell in die Gänge kommen.


    Für Manipulationen an Strings ist Perl grossartig und der Umgang mit regulären Ausdrücken dürfte wohl ungeschlagen sein, sprich das ist sicher eine Sprache die es sich lohnt einmal anzuschauen.


    Definitiv, für das ist Perl super!
    Aber wenn man mit Perl ein Automatisierungs Shell-Script schreibt, muss man schon sehr sadistisch veranlagt sein. :gap

    plex@truenas: i7-9700, 64GB DDR4 RAM, 18*10TB, 4TB NVMe

    mobile@osx: Macbook Air M1

    desktop@win11: Ryzen 5700G@4.4GHz, 64 GB DDR4, RTX 3070 8GB, 16TB HDD, 8TB SATA SSD, 2TB NVMe

  • Für OS User nutzt man "useradd" und "userdel" System commands und fummelt grundsätzlich nicht in der /etc/passwd, /etc/group und /etc/shadow herum.
    In Perl kannst mit `Backticks` immer Systembefehle in der Shell ausführen. Wenn dein Perlscript aber aus praktisch nur Shellcommands besteht, kannst du gleich ein Bash Script schreiben.
    Ist es denn zwingend, dass das Script in Perl geschrieben werden muss? Denn hier scheint mir Bash eher am Platz.
    Ach ja, User und Group IDs sollen random vergeben werden? Hab mal was angefangen...


    users-to-create.txt:

    Code
    1. testuser,testgruppe,vorname,nachname


    users-to-create.pl


    Um den User oder die Gruppe zu prüfen habe ich POSIX Funktionen von Perl benutzt:
    http://perldoc.perl.org/5.8.9/functions/getpwuid.html
    Den chomp beim $nachname wird benötigt, um den Zeilenumbruch zu entfernen, da es sonst einen Fehler im "useradd" Befehl gibt.
    Und falls du nicht root bist, musst du die groupadd und useradd mit sudo ausführen (sofern die Regel dies zulässt).

  • Hier noch das Löschscript. Hatte auch grad bock auf coden. Mein Mojo ist aber nicht so stark.