Aller au contenu

[script] Supprimer les utilisateurs d'un groupe


Messages recommandés

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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 :D (enfin, ça fait une version avec sed)...

Posté(e)

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

:D

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

  • 2 semaines après...
Posté(e)

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...