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.
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
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
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
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.
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