Traiter le résultat d'un getent passwd dans un script

Hello,

Pour besoin perso, j’ai créé un script me permettant de créer des user ldap/pam. Tout se passe bien, mais j’aimerais aller plus loin de façon à ce que lorsque je demande d’entrer l’uid et le gid de l’utilisateur, je vérifie d’abord s’il n’est pas déjà pris par un autre user/groupe.
Pour ça, je passerais par un “getent passwd” et je vérifierais si mon gid/uid n’existerait pas dedans. Pour faire ça, je ne vois comme solution que de faire ceci :

soit $var1 = mon uid
soit $var2 = mon gid

getent passwd > getent.tmp ici commande pour controler que $var1 et $var2 n'existent pas dans getent.tmp

Le hic est que je ne vois pas comment en une belle commande vérifier ces conditions…

/edit : en fait, je viens de penser un cat getent monfichier |grep $var1 me renvoit la ligne comprennant mon uid, mais ce que je voudrais, c’est savoir cette commande renvoi ou non quelquechose. Si oui, c’est pas bon, si non (pas de résultat) on continue sans rien dire.

Bonjour,

Lors de l’utilisation de la commande grep, le code retour de celle ci est 0 si au moins un resultat a ete trouve sinon 1.

Tu peux aussi travailler comme ceci :

Paramèetre q car le resultat ne t’interresse pas juste le retour de cette commande à tester avec $?

La syntaxe de passwd est normalement celle ci :

Curieux, si je fais un :

ldapuid=1004 ldapgid=17895 var1=$(getent passwd | egrep -q ".*:.*:($ldapuid:.*|.*:$ldapgid)") echo $var1

Je ne vois pas de 0 ou de 1, je n’arrive pas à faire mon contrôle correctement, ou je m’y prends comme un pied pour récupérer mon $var1…

Bonjour,

La syntaxe est plutot la suivante :

getent passwd | egrep -q ".*:.*:($ldapuid:.*|.*:$ldapgid)" if [ $? -eq 0 ] then Le uid ou le gid existe deja else On peux creer le compte fi

Voilà le bout de code exact, parceque là je m’en sors pas :

A noter que j’ai virer le controle du gid, car un user peut avoir le même gid qu’un autre.

getent passwd | egrep -q ".*:.*:($ldapuid:.*)" if [$? -eq 0 ] then echo -n "Attention, l'uid est déjà pris : " getent passwd |grep -n $ldapuid echo -n "Continuer ? (y/n)"; read continuer if [ $continuer != y ] then exit fi fi

ça ne marche toujours pas :neutral_face:

/edit : en fait c’est bon, mais je ne sais pas ce que j’ai changé pour que ça marche :neutral_face:

Merci à tous :slightly_smiling: