web-dev-qa-db-fra.com

Comment vérifier si un groupe existe et ajouter s'il ne l'est pas dans le script Linux Shell

voici un résumé de ce que je veux que mon code fasse:

if (group exists)
then

  (add user to group)

else

  (create group)

  (add user to group)

fi

J'utilise la machine virtuelle Ubuntu mais tous les résultats que j'ai trouvés sur des sites similaires ne fonctionnent pas.

32
annieapple2000

Ce script peut vous aider:

   read -p "enter group name: " group
   if grep -q $group /etc/group
    then
         echo "group exists"
    else
         echo "group does not exist"
    fi
10
Rups

L'instruction grep dans la solution de rups a quelques défauts:

Par exemple. grepping pour un groupe admin peut retourner true ("le groupe existe") quand il y a un groupe lpadmin.

Soit corrigez la requête grep-

grep -q -E "^admin:" /etc/group

ou utiliser

if [ $(getent group admin) ]; then
  echo "group exists."
else
  echo "group does not exist."
fi
47
andiba

Grepping/etc/group fonctionne, mais uniquement sur une machine où /etc/nsswitch.conf a:

group: files

ce qui signifie que seul/etc/group est consulté lors de la détermination des groupes disponibles. Utilisation:

getent group <groupname>

pour une solution plus générique, vérifier l'état de sortie: 0 signifie "existe", non nul signifie "n'existe pas". Par exemple, pour vérifier si le groupe "postgres" existe et le créer s'il ne fonctionne pas (en supposant que bash Shell, en tant qu'utilisateur capable de créer de nouveaux groupes) s'exécute:

/usr/bin/getent group postgres 2>&1 > /dev/null || /usr/sbin/groupadd postgres
16
Lemon Cat

Je l'ai trouvé plus utile, pour composer la solution d'Andiba dans une fonction appropriée:

function grpexists {
if [ $(getent group $1) ]; then
  echo "group $1 exists."
else
  echo "group $1 does not exist."
fi

}

Cela peut par exemple être invoqué dans votre environnement en incluant cette fonction dans votre /etc/bash.bashrc*, de sorte que vous pouvez ensuite vérifier l'existence d'un groupe, en utilisant le sort suivant:

grpexists group_name

Qui devrait ensuite retourner l'un des:

le groupe nom_groupe existe.

ou

le groupe nom_groupe n'existe pas.

5
nemesisfixx

Voici 3 commandes qui devraient fonctionner:

group=Sudo
grep -qw ^$group /etc/group || groupadd $group
usermod -aG $group $USER

Ou un, lorsque vous utilisez -f/--force (quitter avec succès si le groupe existe déjà):

groupadd -f mygroup && usermod -aG mygroup $USER
1
kenorb