Hallo Leute, könnt Ihr mal auf mein Script schauen. Auf manchen Maschinen läuft es und auf meiner 10er Suse nicht. Ich habe vermutlich etwas nicht standartkonformes drin. Beim Start springt er sofort zur Eingabe des Benutzers. #!/bin/bash $TMP="/tmp/smb.tmp" kdialog --backtitle Benutzer --title Details \ --radiolist "Bitte wählen Sie \ Hier können Sie Benutzer anlegen und ändern" 16 60 5 \ "neu" "User anlegen" off \ "ändern" "User ändern" off \ "löschen" "User löschen" off 2>TMP ACT=$(cat TMP) rm TMP if [ -z $ACT ] ; then echo Abgebrochen exit fi if [ ACT=neu ] ; then dialog --inputbox "Bitte Benutzernamen eingeben" 30 50 2> TMP USER=$(cat TMP) rm TMP if [ -z $USER ] ; then echo Abgebrochen exit fi dialog --inputbox "Bitte Passwort eingeben" 30 50 2> TMP PASSWD=$(cat TMP) rm TMP if [ -z $PASSWD ] ; then echo Abgebrochen exit fi useradd $USER -p $PASSWD -s /bin/false -d /home/$USER mkdir /home/$USER chown $USER.users /home/$USER printf "$PASSWD\n$PASSWD\n" | smbpasswd -a -s $PASSWD fi if [ ACT=ändern ] ; then dialog --inputbox "Bitte Passwort eingeben" 30 50 2> TMP PASSWD=$(cat TMP) rm TMP if [ -z $PASSWD ] ; then echo Abgebrochen exit fi printf "$PASSWD\n$PASSWD\n" | smbpasswd -a -s $PASSWD fi if [ ACT=löschen ] ; then dialog --inputbox "Bitte Username zum löschen eingeben" 30 50 2> TMP USER=$(cat TMP) if [ -z $USER ] ; then echo Abgebrochen exit fi smbpasswd -x $USER userdel $USER echo "loesche User" $USER fi Danke schon im voraus Olli
Hallo, Oliver Wiemer, 9.1.2006 20:54:
Hallo Leute,
könnt Ihr mal auf mein Script schauen. Auf manchen Maschinen läuft es und auf meiner 10er Suse nicht. Ich habe vermutlich etwas nicht standartkonformes drin.
Beim Start springt er sofort zur Eingabe des Benutzers.
Meine Vorschläge:
#!/bin/bash $TMP="/tmp/smb.tmp"
TMP="/tmp/smb.tmp"
kdialog --backtitle Benutzer --title Details \ --radiolist "Bitte wählen Sie \ Hier können Sie Benutzer anlegen und ändern" 16 60 5 \ "neu" "User anlegen" off \ "ändern" "User ändern" off \ "löschen" "User löschen" off 2>TMP
...off 2> $TMP
ACT=$(cat TMP)
ACT=$(cat $TMP)
rm TMP
if [ -z $ACT ] ; then echo Abgebrochen
[echo "Abgebrochen"]
exit fi
if [ ACT=neu ] ; then
if [ "$ACT" = "neu" ] ; then (Du willst doch testen ob die Varible ACT gleich "neu" ist?)
dialog --inputbox "Bitte Benutzernamen eingeben" 30 50 2> TMP
... 30 50 2> $TMP
USER=$(cat TMP)
USER=$(cat $TMP)
rm TMP
rm $TMP
if [ -z $USER ] ; then echo Abgebrochen
[echo "Abgebrochen"]
exit fi
dialog --inputbox "Bitte Passwort eingeben" 30 50 2> TMP
... 30 50 2> $TMP
PASSWD=$(cat TMP)
PASSWD=$(cat $TMP)
rm TMP
rm $TMP
if [ -z $PASSWD ] ; then echo Abgebrochen
[echo "Abgebrochen"]
exit fi
useradd $USER -p $PASSWD -s /bin/false -d /home/$USER mkdir /home/$USER chown $USER.users /home/$USER printf "$PASSWD\n$PASSWD\n" | smbpasswd -a -s $PASSWD fi
if [ ACT=ändern ] ; then
if [ "$ACT" = "ändern" ] ; then
dialog --inputbox "Bitte Passwort eingeben" 30 50 2> TMP
... 2> $TMP
PASSWD=$(cat TMP)
... cat $TMP
rm TMP
rm $TMP
if [ -z $PASSWD ] ; then echo Abgebrochen
[echo "Abgebrochen"]
exit fi
printf "$PASSWD\n$PASSWD\n" | smbpasswd -a -s $PASSWD fi
if [ ACT=löschen ] ; then
if [ "$ACT" = "löschen" ] ; then
dialog --inputbox "Bitte Username zum löschen eingeben" 30 50 2> TMP USER=$(cat TMP)
...2> $TMP USER=$(cat $TMP)
if [ -z $USER ] ; then echo Abgebrochen
[echo "Abgebrochen"]
exit fi
smbpasswd -x $USER userdel $USER echo "loesche User" $USER fi
Danke schon im voraus
Olli
Gruß Kimmo
Hallo, On 1/9/2006 8:27 PM, K. Elo wrote:
Hallo,
Oliver Wiemer, 9.1.2006 20:54:
Hallo Leute,
könnt Ihr mal auf mein Script schauen. Auf manchen Maschinen läuft es und auf meiner 10er Suse nicht. Ich habe vermutlich etwas nicht standartkonformes drin.
Beim Start springt er sofort zur Eingabe des Benutzers.
Meine Vorschläge:
#!/bin/bash $TMP="/tmp/smb.tmp"
TMP="/tmp/smb.tmp"
Nee, auch nicht. Diese Methoden sind böse, vor allem wenn ich darin nacheinander Benutzernamen und Passwörter aufbewahre. Wenn's denn ein shellscript sein soll dann zumindest bitte mit mktemp. man mktemp hilft. Obwohl ich den Verdacht habe dass das eigentliche Problem auch eleganter gelöst werden könnte... Da ich aber weder eine fertige Lösung hier habe noch grade die Zeit habe mir eine auszudenken muss ich das als Aufgabe stehen lassen :-) Arno
kdialog --backtitle Benutzer --title Details \ --radiolist "Bitte wählen Sie \ Hier können Sie Benutzer anlegen und ändern" 16 60 5 \ "neu" "User anlegen" off \ "ändern" "User ändern" off \ "löschen" "User löschen" off 2>TMP
...off 2> $TMP
ACT=$(cat TMP)
ACT=$(cat $TMP)
rm TMP
Hier auch.
if [ -z $ACT ] ; then echo Abgebrochen
[echo "Abgebrochen"]
exit fi
if [ ACT=neu ] ; then
if [ "$ACT" = "neu" ] ; then (Du willst doch testen ob die Varible ACT gleich "neu" ist?)
dialog --inputbox "Bitte Benutzernamen eingeben" 30 50 2> TMP
... 30 50 2> $TMP
USER=$(cat TMP)
USER=$(cat $TMP)
rm TMP
rm $TMP
if [ -z $USER ] ; then echo Abgebrochen
[echo "Abgebrochen"]
exit fi
dialog --inputbox "Bitte Passwort eingeben" 30 50 2> TMP
... 30 50 2> $TMP
PASSWD=$(cat TMP)
PASSWD=$(cat $TMP)
rm TMP
rm $TMP
if [ -z $PASSWD ] ; then echo Abgebrochen
[echo "Abgebrochen"]
exit fi
useradd $USER -p $PASSWD -s /bin/false -d /home/$USER mkdir /home/$USER chown $USER.users /home/$USER printf "$PASSWD\n$PASSWD\n" | smbpasswd -a -s $PASSWD fi
if [ ACT=ändern ] ; then
if [ "$ACT" = "ändern" ] ; then
dialog --inputbox "Bitte Passwort eingeben" 30 50 2> TMP
... 2> $TMP
PASSWD=$(cat TMP)
... cat $TMP
rm TMP
rm $TMP
if [ -z $PASSWD ] ; then echo Abgebrochen
[echo "Abgebrochen"]
exit fi
printf "$PASSWD\n$PASSWD\n" | smbpasswd -a -s $PASSWD fi
if [ ACT=löschen ] ; then
if [ "$ACT" = "löschen" ] ; then
dialog --inputbox "Bitte Username zum löschen eingeben" 30 50 2> TMP USER=$(cat TMP)
...2> $TMP USER=$(cat $TMP)
if [ -z $USER ] ; then echo Abgebrochen
[echo "Abgebrochen"]
exit fi
smbpasswd -x $USER userdel $USER echo "loesche User" $USER fi
Danke schon im voraus
Olli
Gruß Kimmo
-- IT-Service Lehmann al@its-lehmann.de Arno Lehmann http://www.its-lehmann.de
Hallo Leute, es ist zum auswachsen. Ich habe das Script nach Euren vorschlägen geändert. Die Maschine mit Suse10 steht im Keller und ich habe das ganze via ssh auf der Kiste gemacht. Vom Notebook aus im Terminal geht es, lokal im Terminal wird der Cursur nur ein Stück nach unten versetzt. Ich finde den Knopf nicht, nach was ich Suchen soll. mktemp erstellt die Datei. dialog geht auch. Hat noch jemand eine Idee. by Olli
Oliver Wiemer schrieb:
Hallo Leute,
es ist zum auswachsen. Ich habe das Script nach Euren vorschlägen geändert. Die Maschine mit Suse10 steht im Keller und ich habe das ganze via ssh auf der Kiste gemacht. Vom Notebook aus im Terminal geht es, lokal im Terminal wird der Cursur nur ein Stück nach unten versetzt.
Ich finde den Knopf nicht, nach was ich Suchen soll. mktemp erstellt die Datei. dialog geht auch.
Hat noch jemand eine Idee. Poste das script, so wie es jetzt ist, doch nochmal hierher.
Gruss Bernd
Am Montag, 9. Januar 2006 19:54 schrieb Oliver Wiemer:
Hallo Leute,
könnt Ihr mal auf mein Script schauen. Auf manchen Maschinen läuft es und auf meiner 10er Suse nicht. Ich habe vermutlich etwas nicht standartkonformes drin.
Beim Start springt er sofort zur Eingabe des Benutzers.
#!/bin/bash $TMP="/tmp/smb.tmp"
kdialog --backtitle Benutzer --title Details \ --radiolist "Bitte wählen Sie \ Hier können Sie Benutzer anlegen und ändern" 16 60 5 \ "neu" "User anlegen" off \ "ändern" "User ändern" off \ "löschen" "User löschen" off 2>TMP
hey, das ging doch schon mal über die Liste hier (5.12.2005, Subject shell dialog). Incl. Antworten von mir und Reaktionen von Dir darauf. Warum also nochmal die gleiche Frage? Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Oliver Wiemer schrieb:
Hallo Leute,
könnt Ihr mal auf mein Script schauen. Auf manchen Maschinen läuft es und auf meiner 10er Suse nicht. Ich habe vermutlich etwas nicht standartkonformes drin.
Beim Start springt er sofort zur Eingabe des Benutzers. Du bist "quotefaul" ;) Lieber einmal zuviel quoten als zuwenig. Also alle Stringvariablen immer in "" einschliessen!
#!/bin/bash $TMP="/tmp/smb.tmp"
Fehler TMP="/tmp/smb.tmp" Besser TMP=$(mktemp /tmp/smb-XXXXXXX.tmp) siehe: man mktemp
kdialog --backtitle Benutzer --title Details \ --radiolist "Bitte wählen Sie \ Hier können Sie Benutzer anlegen und ändern" 16 60 5 \ "neu" "User anlegen" off \ "ändern" "User ändern" off \ "löschen" "User löschen" off 2>TMP
Fehler "löschen" "User löschen" off 2>$TMP
ACT=$(cat TMP)
Fehler ACT=$(cat $TMP) Risiko, was ist wenn $TMP nicht existiert? if [ -e $TMP ] ; then ACT=$(cat $TMP) else echo "$TMP existiert nicht" exit fi
rm TMP
Fehler rm $TMP
if [ -z $ACT ] ; then echo Abgebrochen exit fi
if [ ACT=neu ] ; then
Fehler Dieser Ausdruck ist nicht nur syntaktisch falsch, er ist auch noch immer wahr! Genauso wie if [ 1 ] ; then.... immer wahr ist. Richtig: if [ "$ACT" = "neu" ] ; then... Jetzt wird die Variable $ACT geprüft ob sie "neu" enthält.
dialog --inputbox "Bitte Benutzernamen eingeben" 30 50 2> TMP USER=$(cat TMP)
Fehler USER=$(cat $TMP)
rm TMP
Fehler rm $TMP
if [ -z $USER ] ; then echo Abgebrochen exit fi
dialog --inputbox "Bitte Passwort eingeben" 30 50 2> TMP
Fehler 2> $TMP
PASSWD=$(cat TMP)
Fehler USER=$(cat $TMP)
rm TMP
Fehler rm $TMP
if [ -z $PASSWD ] ; then echo Abgebrochen exit fi
useradd $USER -p $PASSWD -s /bin/false -d /home/$USER mkdir /home/$USER chown $USER.users /home/$USER printf "$PASSWD\n$PASSWD\n" | smbpasswd -a -s $PASSWD fi
if [ ACT=ändern ] ; then
Fehler if [ "$ACT" = "ändern" ] ; then
dialog --inputbox "Bitte Passwort eingeben" 30 50 2> TMP
Fehler 2> $TMP
PASSWD=$(cat TMP)
Fehler PASSWD=$(cat $TMP)
rm TMP
Fehler rm $TMP
if [ -z $PASSWD ] ; then echo Abgebrochen exit fi
printf "$PASSWD\n$PASSWD\n" | smbpasswd -a -s $PASSWD fi
if [ ACT=löschen ] ; then
Fehler if [ "$ACT" = "löschen" ] ; then
dialog --inputbox "Bitte Username zum löschen eingeben" 30 50 2> TMP
Fehler 2> $TMP
USER=$(cat TMP)
Fehler USER=$(cat $TMP)
if [ -z $USER ] ; then echo Abgebrochen exit fi
smbpasswd -x $USER userdel $USER echo "loesche User" $USER fi
Danke schon im voraus
puh, ja bitte. Dieses Script ist noch niemals richtig gelaufen! Es kann sein, dass das unbemerkt blieb, weil die Datei TMP immer vom 1. 'Dialog' Aufruf angelegt wurde. Du solltest immer absolute Pfadangaben verwenden, oder PATH am Anfang des Scriptes setzen. Also: export PATH=bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin oder z.B: /usr/bin/smbpasswd -x $USER Solltest Du noch einen Fehler finden, darfst Du ihn behalten ;) Du solltest jetzt in der Lage sein, ihn selbst zu beheben. Gruss Bernd
Oliver Wiemer schrieb:
Hallo Leute,
könnt Ihr mal auf mein Script schauen. Auf manchen Maschinen läuft es und auf meiner 10er Suse nicht. Ich habe vermutlich etwas nicht standartkonformes drin.
Beim Start springt er sofort zur Eingabe des Benutzers.
Da sind mir noch ein paar Sachen aufgefallen...
#!/bin/bash $TMP="/tmp/smb.tmp"
Da hab ich Dir einen Fehler eingebaut ;) Es heisst TMP=$( mktemp /tmp/smb-XXXXXX ) #Ohne .tmp
kdialog --backtitle Benutzer --title Details \
kdialog? Ist ja wohl falsch, die Optionen passen jedenfalls nicht dazu.
--radiolist "Bitte wählen Sie \ Hier können Sie Benutzer anlegen und ändern" 16 60 5 \ "neu" "User anlegen" off \ "ändern" "User ändern" off \ "löschen" "User löschen" off 2>TMP
ACT=$(cat TMP)
rm TMP
if [ -z $ACT ] ; then echo Abgebrochen exit fi
if [ ACT=neu ] ; then dialog --inputbox "Bitte Benutzernamen eingeben" 30 50 2> TMP USER=$(cat TMP)
Die Variable USER ist schlecht. Die gibts u.U in der Shell schon. Nimm also 'Benutzer' oder UserName oder sowas.
rm TMP if [ -z $USER ] ; then echo Abgebrochen exit fi
dialog --inputbox "Bitte Passwort eingeben" 30 50 2> TMP PASSWD=$(cat TMP) rm TMP if [ -z $PASSWD ] ; then echo Abgebrochen exit fi
useradd $USER -p $PASSWD -s /bin/false -d /home/$USER mkdir /home/$USER chown $USER.users /home/$USER printf "$PASSWD\n$PASSWD\n" | smbpasswd -a -s $PASSWD
Ich habe die Syntax nicht im Kopf, aber sollte das nicht printf "$USER\n$PASSWD\n" | ... heissen? Abgesehen davon ist der korrekte Aufruf von printf: printf "%s\n%s\n" "$USER" "$PASSWD"
fi
if [ ACT=ändern ] ; then
Woher kommt hier der Username, ich denke das fehlt hier noch.
dialog --inputbox "Bitte Passwort eingeben" 30 50 2> TMP PASSWD=$(cat TMP) rm TMP if [ -z $PASSWD ] ; then echo Abgebrochen exit fi
printf "$PASSWD\n$PASSWD\n" | smbpasswd -a -s $PASSWD
s.o -- Gruss Bernd
participants (5)
-
Arno Lehmann
-
Bernd Obermayr
-
Dr. Jürgen Vollmer
-
K. Elo
-
Oliver Wiemer