Veröffentlicht 12. Dezember 200321 j Hi @all, ich hab eine liste mit Verschiedenen user (ca. 300), die ich anlegen muss. Dafür habe ich ein kleins Shell-skript geschrieben. Jetzt habe ich ein problem, also die User kann ich ohne Probleme anlegen, nur dass jetzt die User auch noch diesen kommentar bekommen müssen ... Wie kann ich das noch in mein Skript einbauen ??? #!/bin/bash ID=1000 for user in `cat user-datei` do useradd -m -u $ID -s /bin/bash -p Wnfn6EbfHzmzk $user ID=$((ID+1)) done
12. Dezember 200321 j Evtl. bringt's Dich weiter wenn Du noch als zusätzliches Argument -c "Dies ist ein supertoller Kommentar" hinzufügst. War das das was Du meintest?
12. Dezember 200321 j Ja, aber, dann bekommt ja jeder User den gleichen kommentar ! Ich hab eine Liste mit einem Kommentar für jeden USER, wie kann ich das jetzt so einbinden, dass die Liste ausgelesen wird ???
13. Dezember 200321 j Hallo, das ist total einfach, es kommt nur darauf an, wie deine Liste (eventl. Textdatei) aussieht bzw. wie die aufgebaut ist. Bitte poste mal einfach das Layout. Dann kann man dir auch weiterhelfen... Sieht sie so aus: user das ist der Chef user2 das ist der Vorstand oder etwa so: user das ist der Chef user2 das ist der Vorstand oder doch so: user:das ist der Chef user2:das ist der Vorstand ??
14. Dezember 200321 j Also ich hab 2 Varianten bis jetzt ... Die erste Variante: ============== Es gibt 2 Text Dateien. In der ersten stehen die User drin und in der 2. die Kommentare. Die zweite Variante: ============== Die /etc/passwd... Also es geht darum, dass ich ein system installiert habe und genau die gleichen User, die auf dem Alten system noch definiert sind, müssen auch auf dem Neuen System definiert werden. Format: username:x:500:100:kommentar:/home/username:/bin/bash Kannst du mir helfen ?
14. Dezember 200321 j Du kannst die Einträge aus der passwd und shadow Datei einfach kopieren und in die neue passwd und shadow Datei einfügen. Dabei mußt Du aber aufpassen, dass die Userid nicht doppelt vorkommt. Frank
14. Dezember 200321 j Das ist nicht so einfach ... Die User bekommen auf dem System ein ID ab 1000 und dann kommen noch weitere andere vorgaben, die beachtet werden müssen ... Jeder User bekommt dann ein Start passwort, dass er beim esten anmelden, gleich ändern muss (passwd -e USERNAME)
15. Dezember 200321 j Hi noch mal.... also ich hab mich jetzt enschieden, das Layout der Datei sieht folgender masen aus: user:das ist der Chef user2:das ist der Vorstand
15. Dezember 200321 j #! /bin/bash ID=1000 for user in $(cat user-datei); do echo "Kommentar fuer User '$user' eingeben..." read comment echo useradd -m -u -s /bin/bash -c $comment -p xyz $user ID=$((ID+1)) done so, vielleicht erleichtert dieses Konstrukt deine Arbeit. Besser konnte ich es auf die Schnelle auch nicht lösen.
15. Dezember 200321 j Hi, folgendes hilft Dir eventuell weiter : #!/bin/bash ID=1000 USERS=/tmp/users while read LINE do USER=`echo $LINE | cut -f 1 -d :` COMMENT=`echo $LINE | cut -f 2 -d :` echo "useradd -u $ID -c "$COMMENT" -d /home/$USER -m $USER" ID=`expr $ID + 1` done < $USERS Sollte es sich um eine größere Anzahl von Benutzern handeln die auf diversen System vorhanden seinen müssen, solltest Du mal einen Blick auf ein zentrale Benutzerverwaltung, wie z.B. LDAP werfen.
16. Dezember 200321 j Original geschrieben von DanielB Hi, folgendes hilft Dir eventuell weiter : #!/bin/bash ID=1000 USERS=/tmp/users while read LINE do USER=`echo $LINE | cut -f 1 -d :` COMMENT=`echo $LINE | cut -f 2 -d :` echo "useradd -u $ID -c "$COMMENT" -d /home/$USER -m $USER" ID=`expr $ID + 1` done < $USERS Ich glaube das ist das, was er gebraucht hat Ganz kleine Verbesserung: #!/bin/bash ID=1000 USERS=/tmp/users while read LINE do USER=`echo $LINE | cut -f 1 -d :` COMMENT=`echo $LINE | cut -f 2 -d :` echo "useradd -u $ID -c "\""$COMMENT"\"" -d /home/$USER -m $USER" ID=`expr $ID + 1` done < $USERS Ich weiß zwar nicht, ob dem useradd das was ausmacht, aber sicher ist sicher (Comment in Doppelhochkommas).
18. Dezember 200321 j Hi @all, danke für die Lösungen ... Ihr hab mir sehr geholfen ... Eins verstehe ich immer noch nicht, ich hab das skript so ausgeführt:#!/bin/bash ID=1000 USERS=/shell-skripte/datei while read LINE do USER=`echo $LINE | cut -f 1 -d :` COMMENT=`echo $LINE | cut -f 2 -d :` echo "useradd -u $ID -c "\""$COMMENT"\"" -d /home/$USER -s /bin/ksh -p Wnfn6EbfHzmzk -m $USER" echo "passwd -e $USER" ID=`expr $ID + 1` done < $USERS Einer der Aushaben sieht folgendermasen aus:useradd -u 1048 -c "K.D. Hutter" -d /home/hutter -s /bin/ksh -p Wnfn6EbfHzmzk -m hutter passwd -e hutter Das komische ist jetzt nur, wenn ich das Skript so laufen lasse, kommt immer folgende Meldung von useradd:usage: useradd [-u uid [-o]] [-g group] [-G group,...] [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name useradd -D [-g group] [-b base] [-s shell] [-f inactive] [-e expire ] Der hat ein Problem mit den Kommentaren ... Aber wieso ??? Ich hab, dass es jetzt dringens ist, einfach die ausgaben in eine andere Datei umgeleitet und einfach als Skript ausgeführt... Aber hat einer eine Ahnung wieso er da Probs hat ???
18. Dezember 200321 j ja klar....jetzt verstehe ich es erst! Also du hast folgendes Problem.....wenn du nen echo vor das useradd machst, dann brauchst du sowas: echo "\""$comment"\"" hingegen bei useradd: useradd "$comment" ließ dir die Zeilen langsam durch und dann siehst du auch den großen Unterschied! Dann schreibs halt doch so: Achtung: ich hab das echo jetzt weggenommen! #!/bin/bash ID=1000 USERS=/tmp/users while read LINE do USER=`echo $LINE | cut -f 1 -d :` COMMENT=`echo $LINE | cut -f 2 -d :` "useradd -u $ID -c "$COMMENT" -d /home/$USER -m $USER" ID=`expr $ID + 1` done < $USERS Ich finde halt das andere Konstrukt besser: 1. Weil es eine Art debug ist - du kannst die Kommandos vorher kontrollieren - somit besteht die Möglichkeit die Strings ggf. zu verändern 3. Weil du ganz einfach die Kommandos mit der linken Maus markieren kannst und mit der rechten Maustaste bzw. MausRad wieder pasten kannst...d.h. die Kommandos werden autom. ausgeführt! und das find ich doch saupraktisch (sorry für den Ausdruck).
18. Dezember 200321 j Achso ... Klar, dass war ja nur fürs echo. Stimmt, mit dem echo, kann man Testen, was da Eigentlich raus kommt ... Jetzt funkt es auch wie es soll ... Man muss nur noch die anfürungszeichen in der useradd - Zeile wegnehmen:#!/bin/bash ID=1000 USERS=/tmp/users while read LINE do USER=`echo $LINE | cut -f 1 -d :` COMMENT=`echo $LINE | cut -f 2 -d :` "useradd -u $ID -c "$COMMENT" -d /home/$USER -m $USER" ID=`expr $ID + 1` done < $USERS
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.