Aller au contenu

[script] Supprimer les utilisateurs d'un groupe


Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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)...

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

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

Lien vers le commentaire
Partager sur d’autres sites

Archivé

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

×
×
  • Créer...