Shellskript-Problem (bash)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
thilo
Beiträge: 241
Registriert: 12.12.2002 22:48:44

Shellskript-Problem (bash)

Beitrag von thilo » 06.05.2003 20:24:44

Hallo!

Das Shellskript "anlegen" (siehe unten) liest aus der Datei "anlegen.txt" mehrere Datensätze ein. Das Ziel ist, unterschiedliche User im System und unter SAMBA anzulegen.

Es wird unterschieden zwischen:
- Maschinen-Accounts
- Benutzern der Gruppe "schueler"
- Benutzern der Gruppe "lehrer"


Die Ausgabe mit dem "echo"-Befehl funktioniert problemlos. Wenn ich das Skript starte, werden die Befehle korrekt auf dem Monitor angezeigt.
Die auskommentierten Zeilen entsprechen exakt den "echo"-Zeilen, nur ohne den "echo"-Befehl.

Mein Problem: Wenn ich das Doppelkreuz in den einzelnen Zeilen entferne, so
erhalte ich beim Starten des Skriptes eine Fehlermeldung. Die User werden
nicht angelegt.


Kann mir jemand helfen?


Vielen Dank für Eure Mühe!


Gruß,

Thilo


Datei "anlegen":

Code: Alles auswählen

#!/bin/bash

erstellen () {
	if [ "$art" = "maschine" ]
	then
		grep ^$user\\$: /etc/passwd
		if [ $? = 1 ]
		then
			echo "adduser --quiet --gecos ,,,, --no-create-home --shell /bin/false --disabled-login --force-badname $user$"
			echo "smbpasswd -am $user$"

			# adduser --quiet --gecos ,,,, --no-create-home --shell /bin/false --disabled-login --force-badname $user$
			# smbpasswd -am $user$
		fi
	fi
		
	if [ "$art" = "benutzer" ]
	then
		grep ^$user: /etc/passwd
		if [ $? = 1 ]
		then
			if [ "$gruppe" = "lehrer" ]
			then
				echo "adduser --quiet --gecos ,,,, $user"
				# adduser --quiet --gecos ,,,, $user
			fi
			if [ "$gruppe" = "schueler" ]
			then
				echo "adduser --quiet --gecos ,,,, --shell /bin/false --disabled-login $user"
				# adduser --quiet --gecos ,,,, --shell /bin/false --disabled-login $user
			fi
			echo "addgroup --quiet $user $gruppe"
			echo "smbpasswd -a $user"
			# addgroup --quiet $user $gruppe
			# smbpasswd -a $user
		fi
	fi
}

addgroup lehrer
addgroup schueler

exec < anlegen.txt
read zeile
while [ "$zeile" != "*** Ende ***,*** Ende ***,*** Ende ***" ]
do
	echo
	user=`echo $zeile | cut -d , -f 1`
	art=`echo $zeile | cut -d , -f 2`
	gruppe=`echo $zeile | cut -d , -f 3`
	erstellen
	read zeile
done
-------------------------------------------------------------------

Datei "anlegen.txt":

Code: Alles auswählen

thilo,benutzer,lehrer
frank,benutzer,lehrer
oliver,benutzer,lehrer
katrin,benutzer,lehrer
rainer,benutzer,schueler
olaf,benutzer,schueler
dennis,benutzer,schueler
dirk,benutzer,schueler
client1,maschine,
client2,maschine,
client3,maschine,
client4,maschine,
*** Ende ***,*** Ende ***,*** Ende ***

Benutzeravatar
schoppi
Beiträge: 279
Registriert: 01.11.2002 10:43:43
Kontaktdaten:

Beitrag von schoppi » 06.05.2003 23:15:22

Startest du das Script als User oder als root? adduser ist zB ein Befehl den nur root ausführen darf. Und wenn es den User im System nicht gibt, hat Samba damit vermutlich auch ein Problem.

Ansonsten würde ich versuchen, die Befehle mit kompletten Pfad anzugeben:

Code: Alles auswählen

# which adduser
/usr/sbin/adduser
# 

schoppi

thilo
Beiträge: 241
Registriert: 12.12.2002 22:48:44

Beitrag von thilo » 07.05.2003 00:04:31

Hallo "schoppi"!

Vielen Dank für Deine Antwort.

Das Skript wird vom User "root" ausgeführt.

Nach dem Starten des Skriptes gebe ich nichts ein, also auch kein Kennwort. Trotzdem erscheint folgende Fehlermeldung:

Code: Alles auswählen

Enter new UNIX password: Retype new UNIX passwort:
passwd: Conversation error
adduser: 'passwd oliver' returned error code 10. Abording.
Cleaning up.
........
"oliver" ist der erste Name, der in der "/etc/passwd" noch nicht angelegt ist.
Dann wird nach dem SAMBA-Kennwort gefragt. Da der Benutzer im System aber noch nicht angelegt wurde, kann er auch unter SAMBA nicht erstellt werden. Es kommt dann eine entsprechende Fehlermeldung.
Im Anschluß werden die anderen Namen _gar nicht mehr_ verarbeitet. Der
Rechner liest nur noch "Leerzeichen" ein.

Wie bereits geschrieben:
Mit dem "echo"-Befehl werden die Befehle so auf den Monitor ausgegeben, wie man sie manuell eintippen müsste. Alles korrekt!



Gruß,

Thilo

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 07.05.2003 04:18:12

Soweit ich weiss braucht adduser ein Terminal, was er beim Start aus dem Shell Skript heraus evtl. nicht hat.

Du könntest versuchen statt adduser einfach useradd (no joke!) zu verwenden. Diesem kann man nämlich auf der Komandozeile den zu benutzenden Passwort Hash mitgeben. Für ein disabled Login solltes das ein "disabled" oder sowas als Hash hin. So fragt der dann nicht nach dem PW....

Versuch macht kluch...

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Antworten