• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[ShellScript]Benutzer anlegen

Hallo,
ich soll als Übungsaufgabe ein shell scpript schrieben, welches (ohne weitere interaktionen) benutzer in einer vorhandenen gruppe anlegt.
Aufgerufen werden soll das ganze dann so:
sudo ./create_user.sh “user“ “Full Name“

meine ideen dazu waren, dass man zunächst wohl variablen braucht für username und namen

username=$1
realname=$2

und dann einen adduser befehl

sudo adduser –gecos „$2“ –ingroup gruppe $1

ich soll dann allerdings noch ein here document verwenden um passwort und passwort wiederholung zu übergeben.
Hab dazu zwar schon in die man page der bash geguckt, aber verstehe trotzdem nur bahnhof… google half bisher auch nicht wirklich, darum hoffe ich, dass vlt hier jmd helfen kann..


Ich kann das ganze auch über „sudo ./create_user.sh “user“ “Full Name““ gar nicht aufrufen, bekomme dann ein „sudo: ./create_user.sh: command not found“
Mit „sudo bash create_user.sh „user1“ „User A““ funktioniert das aufrufen.
 
OP
T

ThorstenXVII

Newbie
ich hatte nicht vor, die threads einfach so nebeneinander herlaufen zu lassen. hätte ich eine antwort, oder weitere gedankengänge die zu einer antwort führen würden, so würde ich die auch überall mitteilen.
ebenso wie die lösung des problems, sobald vorhanden
ich wollte lediglich meine reichweite erweitern, danke.
werde es nächstes mal kenntlich machen
 

susejunky

Moderator
Teammitglied
A

Anonymous

Gast
Mal abgesehen vom Multiposting :zensur: und das wir hier bei Hausaufgaben zwar gerne auf die Sprünge helfen aber auf keinen Fall komplett lösen, mal ein paar Dinge dazu die dir sicherlich weiterhelfen.
ThorstenXVII schrieb:
Ich kann das ganze auch über „sudo ./create_user.sh “user“ “Full Name““ gar nicht aufrufen, bekomme dann ein „sudo: ./create_user.sh: command not found“
Mit „sudo bash create_user.sh „user1“ „User A““ funktioniert das aufrufen.
Fehlermeldung genau anschauen.
Sicherlich hast du vergessen dem Script Ausführungsrechte zu geben.

Wir erinnern uns, ein Bashscript hat eine Shebang Zeile und Ausführungsrechte dann kann es über den Namen aufgerufen werden.
Code:
#!/bin/bash
# Mein Script
....
oder ich rufe die Datei als Option von bash auf, dann braucht es keine Shebangzeile und auch keine Ausführungsrechte, dann ist es aber streng genommen kein Script sondern nur Kommandotext der der Bash zum Ausführen übergeben wird.
ThorstenXVII schrieb:
meine ideen dazu waren, dass man zunächst wohl variablen braucht für username und namen

username=$1
realname=$2

und dann einen adduser befehl

sudo adduser –gecos „$2“ –ingroup gruppe $1
Das hat schon mal den Ansatz, du hast zumindestens mal erkannt wo der Username und der Realname ankommen. Mit der Ausführung haperts noch gewaltig.

wie wäre es denn mit sauberen Variablen für alles.
Code:
USERNAME="$1"
REALNAME="$2"
GRUPPE="looser"
PASSWORT="initialpasswort"
Wichtig hier bei dieser Aufgabe, immer wenn du "$2" oder da wir den Wert übergeben haben "$REALNAME" im Script verwendest, dann musst du dieses dringend in Hochkommas setzen, da der Richtige Name des Users durchaus auch "Doktor Egon Brand von Hinkelstein" sein kann- ;) Wenn du das nicht machst, dann bekommt der User eventuell nicht den vollen richtigen Namen, oder es kann sogar sein dein Script macht seltsame Dinge oder bringt Fehler.

Code:
sudo adduser –gecos „$2“ –ingroup gruppe $1
:schockiert: Nachdem du nun schon so schöne Variablen vergeben hast, jetzt sowas. Dringen noch mal in die Manpage von adduser sehen. Das sudo brauchst du an dieser Stelle nicht, da du das ganze Script mit sudo aufrufen sollst. ( Das sudo dort an dieser Stelle mitten im Script würde dich je nach Konfiguration in /etc/sudoers auch nur behindern, da eventuell ein Passwort verlangen könnte)

ungefahr so müsste das aussehen wenn du dort die Variablen verwendest.
Code:
useradd -c "$REALNAME" -g "$GRUPPE"  "$USERNAME"
Aber aufpassen, da fehlt noch was, wir machen die Hausaufgaben nicht komplett, der User hat so angelegt kein Homeverzeichnis.

ThorstenXVII schrieb:
ich soll dann allerdings noch ein here document verwenden um passwort und passwort wiederholung zu übergeben.
Hab dazu zwar schon in die man page der bash geguckt, aber verstehe trotzdem nur bahnhof… google half bisher auch nicht wirklich, darum hoffe ich, dass vlt hier jmd helfen kann..
So eine bescheuerte Aufgabe kann nur nur in der Schule oder im Studium vorkommen. in der Praxis nimmt man dazu die Option "--stdin" von passwd. und arbeitet mit echo und einer Pipe, ohne Wiederholung und auch ist dabei die Passwortrichtlinie außer Gefecht gesetzt, was im Batchlauf durchaus seine Berechtigung hat.

Aber here Dokument. Findest du wirklich in der Manpage von bash im Abschnitt "REDIRECTION" dort unter "Here Documents" das Internet ist übergens auch randvoll damit.
Grundprinzip
Code:
befehl    <<ENDE
dieser Test wird aus dem Script direkt 
an den Standardeingabekanal des befehls weitergeleitet bis in einer neuen Zeile
das Wort nach dem doppelten Umleitungzeichen kommt
ENDE
Das kannst du schön ausprobieren indem du dort als Befehl cat verwendest.
Die Besonderheit hier, im dem HERE-Text werden nicht alle möglichen Substitiutionen ausgeführt die sonst innerhalb eines Shellscriptes durchgeführt werden. Aber Variablen werden auch Substituiert.
also kannst du dein Here durchaus so hier schreiben.
Code:
befehl <<ENDE
$PASSWORT
$PASSWORT
ENDE
Damit wird dann 2 Mal das in der Variabel stehende Passwort mit anschließendem Newline an den befehl übergeben.

Wenn du jetzt dort den richtigen Befehl eingibst, und das gespeicherte Passwort in der Variable auch den Passwortrichtlinien entspricht, sollte das durchaus in der Lage sein dem User ein Passwort zu setzen.

So nun bist du aber dran.

robi
 
Oben