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,

    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
  2. 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
  3. 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
  4. 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
  5. 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