Probleme dans l'execution de fonction.

Fermé
nico - 8 févr. 2008 à 15:14
 nico - 8 févr. 2008 à 21:30
Bonjour,
J'ai un leger soucis dans l'execution de ce script: lors du premier menu je selectionne le menu 1 puis le menu ajouter un utilisiteur, je rentre ensuite tous les paramètres mais la fonction prend jamais fin et lorsque je tape entrer il me met "ajouter un nom d'utilisateur".
Par ailleurs j'ai une petite question concernant le menu principal tout en bas, pourrais-je le mettre dans une fonction "function_main" par exemple pour revenir en arrière sans que cela plante le menu?
A savoir qu'en copiant la fonction useradd dans un script seul elle marche très bien.
Je travaille sous mandriva pour ce script.

Merci du temps que vous m'accorderez.

#! bin/bash

function useradd() {

# On récupère toutes les valeurs nécessaires
read -p "Login de l'utilisateur à créer ? " username
if [ -z $username ]; then
echo "Vous devez donner un nom à l'utilisateur"
exit 0
fi

read -p "Répertoire personnel ? /home/${username} " homedir
if [ ! -z $homedir ]; then
homedir="-d $homedir"
fi


read -p "Date d'expiration ? [aucune] " expiration
if [ ! -z $expiration ]; then
expiration="-e $expiration"
fi

read -p "groupe principal ?[${username}] " grouprinc
if [ ! -z $grouprinc ]; then
grouprinci=" -g $grouprinc"
fi

read -p "groupe secondaires ?[aucun] " groupseco
if [ ! -z $groupseco ]; then
groupsecon=" -G $groupseco"
fi

# On ajoute l'utilisateur
useradd $homedir -m $expiration $grouprinci $groupsecon $username 2> /dev/null

# On vérifie que tout s'est bien passé
if [ $? -eq 1 ]; then
echo "Une erreur s'est produite lors de la creation de l'utilisateur !"
echo "Veuillez verifier les valeurs saisies."
exit 0
fi
menu_usr_grp;;
}

function menu_usr_grp (){
while
clear
menu=""

echo "_____________________________________________________________________"
echo "|BIENVENUE DANS LE MODULE DE GESTION DES UTILISATEURS ET DES GROUPES|"
echo "|___________________________________________________________________|"

echo "1 - Pour créer un utilisateur"
echo "2 - Pour effacer un utilisateur"
echo "3 - Pour modifier un utilisateur"
echo "4 - Pour ajouter un groupe"
echo "5 - Pour effacer un groupe"
echo "6 - Menu précédent"

read -p "Choisissez un menu: " menu
do
case $menu in
1)
useradd;;
2)
userdel;;
3)
modif_usr;;
4)
groupadd;;
5)
groupdel;;
6)
funtion_main;;
*)
echo "Veuillez tapez un numero correct"
exit 0;;
esac
done

}

while
clear

echo "_____________________________________________________________________"
echo "|Menu principal |"
echo "|___________________________________________________________________|"

echo "1 - Gestions des utilisateurs et des groupes"
echo "2 - Gestion du reseau"

read -p "Choisissez un menu: " menu
do
case $menu in
1)menu_usr_grp;;
2)patata;;
*)
echo "Veuillez tapez un numero correct"
exit 0;;
esac
done
A voir également:

5 réponses

Je pense qu'il est bon d'ajouter aussi que lorsque j'implémente la fonction userdel pour supprimer un utilisateur elle tourne en boucle sans me donner d'erreur, donc je pense qu'il doit manquer un truc en fin de fonction pour qu'elle prenne fin.

Pour la reponse du menu j'ai trouve une solution, c'etait plutot simple en fait, suffisait de creer une fonction pour le menu principal puis de l'appeler en dessous.

Par ailleurs pendant que je suis là, connaissez vous un moyen de verifier lors de l'ajout d'un utilisateur si le nom entrer existe deja ?

merci! :)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
8 févr. 2008 à 19:22
Salut,

Par ailleurs pendant que je suis là, connaissez vous un moyen de verifier lors de l'ajout d'un utilisateur si le nom entrer existe deja ?
cat  /etc/passwd | cut -d: -f1 | egrep  "\b${username}\b" >/dev/null
retval=$?
if [ "$retval" = 0 ]
then echo "L'utilisateur existe déjà"
fi
;-))
0
raspoute Messages postés 827 Date d'inscription lundi 1 mai 2006 Statut Contributeur Dernière intervention 13 septembre 2013 74
8 févr. 2008 à 18:18
Salut,

je ne suis qu'un débutant en script bash, mais si j'ai bien compris ce qui se passe, c'est que ta fonction s'appelle useradd, et en fin de fonction (ligne 34), tu fait appel a la commande useradd. Mais en fait au lieu d'appeller la commande, la fonction se relance elle-même; Une sorte de fonction récursive quoi :)

0
C'est plus ou moins ça, sauf que ligne 34 j'appelle pas la fonction useradd mais menu_usr_grp, le menu dans lequelle ya toute la gestions des utilisateurs et des groupes en fait, d'ailleurs j'ai enlevé les ";;" sinon j'avais une erreur de syntaxe.

La fonction useradd est appelée dans la fonction menu_usr_grp, en tapant 1.

voici le c/c:

Choisissez un menu: 1
Login de l'utilisateur à créer ? nicolas
Répertoire personnel ? /home/nicolas
Date d'expiration ? [aucune]
groupe principal ?[nicolas] michel
groupe secondaires ?[aucun]

le prompt ne revient pas ni le menu précedent donc je tape entrée et s'affiche:
Vous devez donner un nom à l'utilisateur
[18:42:09][root@localhost (/bin)]#

pour la fonction userdel que je viens d'implementer aussi pour voir si c'etait général ou si juste useradd ne marchait pas tourne en boucle comme ceci:

Choisissez un menu: 2
Login de l'utilisateur detruire ? nico
voulez vous detruire son repertoire personnel? y/ny
Login de l'utilisateur detruire ?
....jusqu'à ce que je mette entrée, afin qu'il me dise que j'ai pas mis de nom et qu'il quitte le script.

De même dans un script a part ça fonctionnait très bien mais dans des fonctions aïe...
J'espere avoir pu eclaircir un peu le problème.
0
raspoute Messages postés 827 Date d'inscription lundi 1 mai 2006 Statut Contributeur Dernière intervention 13 septembre 2013 74
8 févr. 2008 à 19:01
Je faisait en fait référence a cette ligne:


# On ajoute l'utilisateur
useradd $homedir -m $expiration $grouprinci $groupsecon $username 2> /dev/null



edit:
en remplaçant la ligne par
/usr/bin/useradd $homedir -m $expiration $grouprinci $groupsecon $username 2> /dev/null


ça devrait le faire :)

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci raspoute c'est bien ça, en fait j'ai changer le nom de mes fonctions par des noms ne faisant rapport à aucunes commandes et ça semble marcher, je vais enfin pouvoir avancer la dedans, merci beaucoup!

Merci Jipici, la commande marche impecable, j'ai plus qu'à essayer de la comprendre, en tout cas vraiment merci de votre aide et d'avoir été si rapide! :)
0