Script bash connaitre tout les utilisateurs

Résolu
Bonjour,

Je cherche a faire un script pour données des droits a tout les utilisateurs pour chacun de mes postes.
Pour connaitre tout les utilisateurs
utilisateurs="cat /etc/group | fgrep 50" 
$utilisateurs | while read users; do  
echo "resultat :" $users 
done 
echo "" 
echo "resultat de utilisateurs :" $utilisateurs


Il m'affiche
[sandrine@localhost ~]$ cat /etc/group | fgrep 50
sandrine:x:500:
lea:x:501:
jean-pierre:x:502:
maintenance:x:503:
[sandrine@localhost ~]$

après j'ai pensé a faire
$ dir -c /home 
sandrine  jean-pierre  lea  maintenance  lost+found


le but est de récupérer uniquement les noms des utilisateurs pour qu'il s'ajoute automatiquement chacun dans le groupe de partage reseau
En gros faire ceci automatiquement :
# adduser sandrine partage_reseau. 
# adduser lea partage_reseau 
# adduser jean-pierre partage_reseau 
# adduser maintenance partage_reseau
via un variable.

Auriez -vous une idée de comment faire ?
Merci.

5 réponses

  1. Bonjour,

    Si « cat /etc/group | fgrep 50 » te renvoie bien tous les users, et rien que eux, alors essaye :

    cat /etc/group | fgrep 50 | cut -d: -f1

    Et normalement tu auras ce que tu cherches à obtenir...

    bonne chance
    0
    1. bonjour,

      quand je fait ceci
      $utilisateurs="cat /etc/group | fgrep 50 | cut -d: -f1"
      $utilisateurs | while read users; do 
      echo "resultat :" $users
      #done
      done
      echo ""
      echo "resultat de utilisateurs :" $utilisateurs


      il m'affiche
      utilisateur.sh: ligne2: =cat /etc/group | fgrep 50 | cut -d: -f1: Aucun fichier ou dossier de ce type


      Directement dans le shell ça marche
      $ cat /etc/group | fgrep 50 | cut -d: -f1
      sandrine
      lea
      jean-pierre


      Merci.
      0
      1. Première ligne :
        utilisateurs=('cat /etc/group | fgrep 50 | cut -d: -f1')
        0
      2. Contributeur
        Salut tuxboy,

        Attention avec la mise en page du forum qui ne prend pas en compte les quotes inversées ;-((

        De toute façon cette syntaxe est quasiment obsolète, mieux vaut lui préféré "$(commande)" :
        utilisateurs=$(cat /etc/group | fgrep 50 | cut -d: -f1)

        Sans compter que la création de cette variable n'est pas nécessaire ;-)
        0
      3. ça m'apprendra à ne pas réfléchir, merci d'avoir rectifié. :p
        0
    2. Contributeur
      Salut,

      while read name
      do 
      echo "adduser ${name} partage_reseau"
      done < <(awk -F":" '/x:50/ { print $1 }' /etc/group)

      0
      1. salut!

        je ne sais pas ce qu'est le mieux

        awk -F":" '/x:50/ { print $1 }' /etc/group | xargs -I{} adduser {} partage_reseau

        ou

        awk -F":" '/x:50/ { print "adduser "$1" partage_reseau" }' /etc/group | sh
        ?

        qu'en pensez-vous?
        0
      2. Contributeur
        Salut,

        Les deux seront sûrement mieux qu'une boucle while :-)

        Merci.
        0
    3. Bonjour,

      merci pour vos réponses.

      Dans le fichier "smb.conf" il faut que j'ajoute les utilisateurs autorisé en écriture, comme ceci :
      write list = sandrine lea jean-pierre maintenance

      avec une variable
      write list = $les_utilisateurs


      mais pour avoir la liste des utilisateurs sur une seul ligne avec un espace entre chaque nom d'utilisateur, comment dois je faire ?

      Merci.
      0
      1. Contributeur
        Salut,

        Il suffit de récupérer la liste dans une variable et de ne pas quoter cette dernière :

        liste=$(awk -F":" '/x:50/ { print $1 }' /etc/group)
        echo ${liste}
        0
    4. Bonjour,

      J'ai besoin d'ajoute tous les utilisateurs directement dans le fichier
       /etc/group

      a la fin de la ligne
      users:x:100:

      Afin d'obtenir
      users:x:100:sandrine,lea,jean-pierre,maintenance


      Dans le genre
      #!/bin/bash
      cp -v /etc/group /etc/group.bak
      usersh=$(awk -F":" '/x:50/ { print $1 }' /etc/group)
      //......
      //Mais comment lui dire de les ajouter a la fin de la ligne ${usersh}
      //------

      comment dois je faire ?
      Merci.
      0
      1. Contributeur
        Salut,

        #!/bin/bash
        
        usersh=$(awk -F":" '/x:50/ { print $1 }' /etc/group) 
        
        liste=$(eval echo ${usersh})
        sed -i.bak '/^users/{s/$/'"${liste// /,}"'/}' /etc/group
        0