Mounji Posté(e) le 2 juin 2008 Posté(e) le 2 juin 2008 Bonjour a vous, Je cherche a realiser un script me permettant de supprimer les utilisateurs d'un groupe. Je sais qu'il faudrait lister tous les utilisateurs du groupe (grep /etc/group?). Les compter (-wc) Et les supprimer (deluser) Cependant je n'arrive pas à mettre ces 3 parties ensemble.... J'ai donc besoin d'une aide Merci @bientot
Compte_supprime_74291 Posté(e) le 2 juin 2008 Posté(e) le 2 juin 2008 Il y a sûrement plus élégant, mais en faisant à-la-rache (et en adaptant à ton cas là où j'ai mis des commentaires) : #!/bin/bash GROUP_NAME=floppy # Remplace par le nom du groupe qui t'intéresse USERS_LIST=`cat /etc/group|grep "$GROUP_NAME:"|cut -d: -f4` if [ -n $USERS_LIST ] then COMPTEUR=$((`echo $USERS_LIST|tr -cd ,|wc -c`+1)) if (($COMPTEUR>1)) then for ((i=1;i<=$COMPTEUR;i+=1)) do USER_TO_DEL=`echo $USERS_LIST|cut -d, -f$i` echo $USER_TO_DEL # Remplace par l'instruction qui efface l'utilisateur done else USER_TO_DEL=$USERS_LIST echo $USER_TO_DEL # Remplace par l'instruction qui efface l'utilisateur fi fi Edit 1 : en y pensant, en fait, ça ne marchera que s'il y a plus d'un utilisateur dans le groupe (je compte les virgules)... Edit 2 : adapté pour marcher, même s'il n'y a qu'un utilisateur dans le groupe
theocrite Posté(e) le 2 juin 2008 Posté(e) le 2 juin 2008 Pourquoi pas groupdel tongoupe # supprime ton groupe et donc toutes la associations avec les utilisateurs groupadd tongroupe
Sandeman Posté(e) le 2 juin 2008 Posté(e) le 2 juin 2008 Juste en passant, l'étape de comptage n'est pas indispensable, sauf si elle t'est imposée par l'énoncé (sinon, ça se comprend que tu la pense utile, en te référant à tes habitudes de dev) GROUP=scanner LIST=`grep $GROUP /etc/group | cut -d":" -f4 | tr "," " "` for USER in $LIST; do echo userdel $USER done
Compte_supprime_74291 Posté(e) le 2 juin 2008 Posté(e) le 2 juin 2008 Sinon, au coup par coup, encore bien plus simple, avec sed : #!/bin/bash GROUP_NAME=floppy # Remplace par le nom du groupe qui t'intéresse USERS_LIST=`cat /etc/group|grep "$GROUP_NAME:"|cut -d: -f4|sed -e 's/,/ /g'` for USER_TO_DEL in $USERS_LIST do echo $USER_TO_DEL # Remplace par l'instruction qui efface l'utilisateur done Edit : Arf, grilled sur le principe... j'ai bêtement fait avec le comptage, vu qu'on parlait de wc (enfin, ça fait une version avec sed)...
theocrite Posté(e) le 2 juin 2008 Posté(e) le 2 juin 2008 Heu... Il faut supprimer du système les utilisateurs qui ont la propriété d'appartenir à un groupe ou juste supprimer leur appartenance à un groupe ?
djuke Posté(e) le 2 juin 2008 Posté(e) le 2 juin 2008 Attention, quand il s'agit du groupe principal de l'utilisateur, celui-ci n'apparait pas dans forcément le /etc/group, il faut aussi chercher dans le /etc/passwd!! Et je ne parle pas de NIS je propose (non testé): #!/bin/bash group=groupe_a_vider typeset -i i for user in $(cut -d : -f 1 /etc/passwd) do if groups $user | grep -w $group >&- then echo "Deleting user $user" userdel $user i=$i+1 fi done echo "group $group had $i members on this host" EDIT: gestion du nombre de users locaux du groupe. NB: ce script ne gère pas les utilisateurs NIS, mais détecte bien l'appartenance à un groupe NIS
Mounji Posté(e) le 14 juin 2008 Auteur Posté(e) le 14 juin 2008 Bon, désolé pour l'absence, mais les alertes pci n'ont pas marchées...... Donc, merci a tous pour votre aide, j'en ai appris pas mal grâce a vous. Je constate aussi que le bash présente un mode de réfléxion différent en comparaison au langages que j'ai l'habitude de pratiquer? Merci encore @bientot
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.