Bash – affiche la liste de tous les utilisateurs et le groupe de chacun et afficher le tous dans un format (nom-utilisateur, group)

[bash]#!/bin/bash
for i in `more /etc/passwd | cut -d ‘:’ -f 1-3`;
do
user=`echo $i | cut -d ‘:’ -f -1` ;
idgroup=`echo $i | cut -d ‘:’ -f 3-` ;
group=`grep :$idgroup: /etc/group | cut -d ‘:’ -f -1` ;
echo « $user,$group »
done[/bash]

Vous avez une idée ? Trouvez gratuitement des développeurs sur Codeur.com !

Recevez des devis (gratuit)

L’équipe de WebActus.net vous propose tous les jours des articles sur l’univers des startups, du e-commerce et du growth hacking.

  • lateo

    sympa.

    je pense que je dois faire qque chose dans ce goût là pour résoudre mon problème. peut-être auras-tu une idée?

    je cherche à savoir si tel utilisateur est dans tel groupe.
    * avec grep et awk
    ça marche… s’il n’y a qu’un utilisateur dans le groupe sinon je bloque pour séparer les users.
    * avec la commande groups
    faut faire une boucle pour lire les valeurs et je suis pas bon pour ça 🙁

    une idée?

  • Romain

    Mon programme n’affiche que le groupe principal de l’utilisateur.

    Si tu as plusieurs groupes pour un utilisateur, il ne faut pas utiliser ce script.

    Dans ce cas, il faut pour chaque utilisateur récupérer l’id du groupe principal et l’afficher (comme c’est le cas dans mon script) et ensuite vérifier dans le fichier /etc/groups la presence du nom de ton utilisateur et le nom des groupes.

    je ne connais pas exactement ta consigne? Es tu obligé d’utiliser awk?

  • lateo

    Merci pour ta réponse

    ton programme ne correspond pas, mais il me semble que sa structure pourrait être adaptée à mon besoin ^^

    et je n’ai pas de consigne, je cherche à résoudre le problème suivant :

    vérifier qu’un utilisateur est ou n’est pas dans tel groupe secondaire.

    par exemple si :
    grep supergroupe /etc/group | awk -F : ‘{print $4}’
    me donne :
    titi,tutu,toto,tata

    je ne n’arrive pas à savoir si toto est bien dans le groupe ou pas 🙁

    de même si je retourne le problème en utilisant :
    groups toto
    qui me donne :
    supergroupe groupbof groupnul

    je n’arrive pas à savoir si toto est bien dans le supergroupe ou pas 🙁

  • lateo

    un camarade m’a trouvé ça ^^

    grep supergroupe /etc/group | awk -F : ‘{print $4}’ | sed ‘s/,/\n/g’ | grep toto

    j’avais complètement zappé sed ^^

  • Romain

    Alors tu peux faire une boucle de cette manière:

    for l in `grep $user /etc/group | cut -d ‘:’ -f -1`
    do
    if [ $l -ne $user ]
    then
    echo « $user,$l »
    fi
    done

    il suffit de rajouter ca dans la deuxième partie de la boucle.

    Le if sert a vérifier que tu ne retournes pas le groupe ayant le même nom que ton utilisateur. Ce groupe est généralement le groupe par défaut donné à l’utilisateur lors de sa création (donc détecté par la première boucle).

Rejoignez la communauté Webactus

Recevez régulièrement les meilleures actus et ressources

Pas de spam, vous pouvez vous désabonner à tous moment.