Script bash connaitre tout les utilisateurs

Résolu
xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
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. laoshu Messages postés 1251 Statut Membre 351
     
    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
  2. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    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. tuxboy Messages postés 1083 Statut Membre 190
       
      Première ligne :
      utilisateurs=('cat /etc/group | fgrep 50 | cut -d: -f1')
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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. tuxboy Messages postés 1083 Statut Membre 190
       
      ça m'apprendra à ne pas réfléchir, merci d'avoir rectifié. :p
      0
  3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

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

    0
    1. Utilisateur anonyme
       
      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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Salut,

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

      Merci.
      0
  4. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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