Apprentissage Script Création d'Utilisateur

Résolu/Fermé
zoreator - Modifié par zoreator le 11/06/2011 à 00:56
jivef Messages postés 927 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 12 novembre 2020 - 23 juin 2011 à 04:13
Bonjour,

Je m'essaie dans la création de script et je suis tombé sur un exercice que j'aimerais bien que l'on m'aide à résoudre avec des commandes de base si possible (pas plus que while, case et IfThenElse).

L'exercice est le suivant :

-------------------------------------------------------------# Écrire un script qui affiche le menu suivant :

Bienvenue dans le programme des débutants

A) Créer un utilisateur
B) Sauvegarder le répertoire de connexion d'un utilisateur
Q) Quitter le programme

Saisir votre choix : _


# Travail :

Créer le menu.

Le curseur sera placé a la fin de la phrase qui vous demande votre choix.


A) Créer un utilisateur

On doit pouvoir saisir << A >> ou « a >>,
On demandera :

1. le nom de |'utilisateur à créer,
2. le nom du groupe primaire, dans le cas où le groupe n'existe pas, il faudra le créer.

On testera tout ce qui doit l'être pour le bon fonctionnement du programme.


B) Sauvegarder le répertoire de connexion d'un utilisateur

On doit pouvoir saisir « B >> ou « b >>,

1. on demandera le nom de l'utilisateur dont on doit sauvegarder le répertoire,
2. on renseignera l'utilisateur sur l'endroit où se trouve sa sauvegarde.

On testera tout ce qui doit l'être pour le bon fonctionnement du programme.


Q) Quitter le programme

On doit pouvoir saisir << Q >> ou « q >>,
Avertir l'utilisateur en quittant le programme.


*) Dans tous les autres cas On ré-affiche le programme en avertissant l'utilisateur.


N.B.
Tous les tests nécessaires pour la bonne exécution du programme sont à réaliser.
Informer les utilisateurs à chaque action exécutée.
----------------------------------------------------------------------------

En vous remerciant par avance.
A voir également:

2 réponses

jivef Messages postés 927 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 12 novembre 2020 306
Modifié par jivef le 11/06/2011 à 02:20
Bonjour,
Alors comme je suis encore jeune ( Tout de même plus proche de la retraite que du service militaire... ) , beau ( Je ressemble nettement plus à Alain de loin qu'à Delon ) , bon et généreux, je te donne un premier morceau d'un script que j'ai écrit il y a quelques années :
Il fait environ 3 pages, commentaires inclus, je te donne la toute première partie.

Tu vois ce que ça fait et avec ça tu dois pouvoir te débrouiller pour avancer.

Ce que je te propose, c'est de travailler un peu de ton coté et de revenir vers nous pour nous montrer ton travail et nous demander de t'aider si tu as rencontré des problèmes.
Il est évident que si tu n'as pas avancé plus, beaucoup d'entre nous ne répondront pas plus.
En ce qui me concerne, si tu ne t'aide pas, je ne t'aiderai pas plus et j'estime qu'avec ce que je te laisse, j'en ai déjà trop fait pour un premier jet.


#!/bin/bash   
# script en shell bash visant a automatiser la creation de compte.   
#===========================================  
# Auteur  | Jonas FERNANDEZ   |    
# Fait a Tahiti - Polynesie Francaise   
#=========================================== 
# N° de version | commentaire     | date   
#=========================================== 
# Version 0     | creation et premier tests.  | 7 fevrier 2009   
# Version Beta | creation compte UNIX uniquement | 8 fevrier    
# Version Beta2 | creation comptes Unix et samba |   
# Version 1     | Mise en prod.    |   
# version 2     |   
#   
#   
#============================================echo "$0 permet de creer des comptes utilisateurs Unix et samba en une seule commande."   
echo "Veuillez saisir le code utilisateur en minuscules. (chiffres autorisés.) \c"   
utilisateur=$utilisateur   
read utilisateur   
echo "$utilisateur"   
case $utilisateur in    
    [a-z0-9]*)    
          echo vous avez bien saisi en minuscules. Bonne saisie.   
          ;;   
    [A-Z]*)   
          echo vous avez saisi en majuscules. Mauvaise saisie. Veuillez relancer le script.   
        exit 0   
        ;;   
esac   
#controle de la non existence du compte.   
echo "le compte utilisateur est correctement saisi, je vais verifier s'il n'existe pas deja."   
vartmp='cat /etc/passwd | cut -d: -f1 | grep "^$utilisateur$"'   
if  test -z "$vartmp"   
    then    
    echo "le compte n'existe pas"   
elif test $vartmp=$utilisateur   
     then   
     echo "le compte existe deja"   
     sleep 2   
     exit 0   
fi   
#[...]      



Ici, tu as un case, un if et un elif...
Pour le reste tu peux te dépatouiller...

Bien cordialement.
Jonas.


Une idée reçue est souvent une idée morte.
0
Merci pour cette réponse qui me donne quelques idées.

Par contre je ne connais pas encore cette partie "elif", je vais aller faire quelques recherches.

Pour l'instant j'ai créée la structure de mon script qui est :


---------------------------------------------------------------------------------------
#!/bin/bash
#
#

#----------------------------------------------------------------------------------
# Nettoyage de l'écran :
clear

#----------------------------------------------------------------------------------
# Déclaration de la variable de boucle :
boucle="boucle"

#Début de boucle :
while test $boucle = "boucle"
do

#----------------------------------------------------------------------------------
#Affichage du Menu de sélection :

# Affichage du titre avec tabulation et souligné :
echo -e "\t \t \033[4mBienvenue dans le programme des Sitels\033[0m"

# Affichage des trois actions possibles avec saut de ligne avant et après :
echo -e "\nA) Créer un utilisateur"
echo "B) Sauvegarder le répertoire de connexion d'un utilisateur"
echo -e "Q) Quitter le programme\n"

# Affichage de la ligne de choix sans retour à la ligne :
echo -e "\t \tSaisir votre choix :\c"

# Enregistrement dans la variable $choix du choix de l'utilisateur :
read choix

#----------------------------------------------------------------------------------
# Embranchement d'actions par rapport au choix de l'utilisateur :
case "$choix" in

# Action si touche "A" ou "a" tapée :
"A" | "a" )
sh "faire2.sh"
clear
;;
#----------------------------------------------------------------------------------
# Action si touche "B" ou "b" tapée :
"B" | "b" )
sh "faire3.sh"
clear
;;
#----------------------------------------------------------------------------------
# Action si touche "Q" ou "q" tapée :
"Q" | "q" )
clear
# Affichage d'un message d'avertissement et sortie du programme :
echo -e "\033[32m \nVous allez quitter ce programme.\033[0m"
echo -e "\033[34m \tBonne journée !\033[0m"
sleep 2
clear
exit
;;
#----------------------------------------------------------------------------------
# Action dans les autres cas :
*)
# Test de si la variable est vide :
if test -z "$choix"
# Si elle l'est alors affichage à l'écran et retour au menu :
then echo -e "\t \033[31m \nVous n'avez rien saisie. Veuillez recommencer.\033[0m"
sleep 1
clear
# Si elle ne l'est pas alors affichage de mauvaise saisie et retour au menu :
else echo -e "\t \033[31m \nSaisie non reconnue. Veuillez recommencer.\033[0m"
sleep 1
clear
# Fin du test :
fi
;;
# Fin de l'embranchement d'actions :
esac

# Fin de boucle :
done

----------------------------------------------------------------------------------------------------
Il me manque juste à créer les deux scripts qui renvois l'utilisateur sur la création et la sauvegarde.
0
Voila ou j'en suis réellement pour aujourd'hui :

Un script en 3 scripts en réalité :

Le 1er : Le menu général
------------------------------------------------------------------------------------
#!/bin/bash
#
#

#----------------------------------------------------------------------------------

# Nettoyage de l'écran :
clear

#----------------------------------------------------------------------------------

# Déclaration de la variable de boucle :
boucle="boucle"

#Début de boucle :
while test $boucle = "boucle"
do

#----------------------------------------------------------------------------------
#Affichage du Menu de sélection :

# Affichage du titre avec tabulation et souligné :
echo -e "\t \t \033[4mBienvenue dans le programme des Sitels\033[0m"

# Affichage des trois actions possibles avec saut de ligne avant et après :
echo -e "\nA) Créer un utilisateur"
echo "B) Sauvegarder le répertoire de connexion d'un utilisateur"
echo -e "Q) Quitter le programme\n"

# Affichage de la ligne de choix sans retour à la ligne :
echo -e "\t \tSaisir votre choix :\c"

# Enregistrement dans la variable $choix du choix de l'utilisateur :
read choix

#----------------------------------------------------------------------------------

# Embranchement d'actions par rapport au choix de l'utilisateur :
case "$choix" in

# Action si touche "A" ou "a" tapée :
"A" | "a" )
sh "faire2.sh"
clear
;;
#----------------------------------------------------------------------------------

# Action si touche "B" ou "b" tapée :
"B" | "b" )
sh "faire3.sh"
clear
;;
#----------------------------------------------------------------------------------

# Action si touche "Q" ou "q" tapée :
"Q" | "q" )
clear
# Affichage d'un message d'avertissement et sortie du programme :
echo -e "\033[32m \nVous allez quitter ce programme.\033[0m"
echo -e "\033[34m \tBonne journée !\033[0m"
sleep 2
clear
break
;;
#----------------------------------------------------------------------------------

# Action dans les autres cas :
*)
# Test de si la variable est vide :
if test -z "$choix"
# Si elle l'est alors affichage à l'écran et retour au menu :
then echo -e "\t \033[31m \nVous n'avez rien saisie. Veuillez recommencer.\033[0m"
sleep 1
clear
# Si elle ne l'est pas alors affichage de mauvaise saisie et retour au menu :
else echo -e "\t \033[31m \nSaisie non reconnue. Veuillez recommencer.\033[0m"
sleep 1
clear
# Fin du test :
fi
;;
# Fin de l'embranchement d'actions :
esac

# Fin de boucle :
done

exit


--------------------------------------------------------------------------------------------------------------
La deuxième pour la création des utilisateurs :

#!/bin/bash
#
# Création d'un utilisateur et son groupe :

#----------------------------------------------------------------------------------

# Nettoyage de l'écran :
clear

#----------------------------------------------------------------------------------

# Accueil de l'utilisateur :
echo -e "\033[34m \tVous allez maintenant pouvoir créer un utilisateur :\033[0m \n"

# On crée une boucle afin de répéter l'action si un test est mauvais :
while :
do
echo -e "\033[34m \nVeuillez entrer le nom de l'utilisateur à créer : \033[0m \c"
read utilisateur

#----------------------------------------------------------------------------------

# On vérifie si l'utilisateur n'existe pas déjà en recherchant dans le fichier passwd :
echo -e "\033[34m \nLe nom d'utilisateur demandé est pris en compte, Vérification de son existence : \033[0m"
verifutil='grep "^$utilisateur" /etc/passwd | cut -d: -f1'
if test -z "$verifutil"

# S'il n'existe pas, on le dis et on passe à la suite :
then echo -e "\033[32mCe nom d'utilisateur est disponible.\033[0m"

# S'il existe, on revient au menu général :
else echo -e "\033[31mCe compte existe déjà . \033[0m"
echo "=> Retour au menu général"
sleep 3
break
fi
#----------------------------------------------------------------------------------

# Demande d'appartenance à un groupe :
echo -e "\033[34m \nVeuillez entrer le groupe auquel il appartient : \033[0m \c"
read groupe

# On vérifie si le groupe n'existe pas déjà en recherchant dans le fichier group :
echo -e "\033[34mVérification de l'existence de ce groupe : \033[0m"
verifgr='grep "^$groupe" /etc/group | cut -d: -f1'
if test -z "$verifgr"

# S'il n'existe pas, on le dis, on le crée et on passe à la suite :
then echo -e "\nCe groupe n'existe pas."
echo -e "\nCréation du groupe en cours..."
sleep 1
groupadd $groupe
echo -e "\nGroupe créé."

# S'il existe, on revient au menu général :
else echo -e "\nCe groupe existe déjà ."
sleep 2

fi
#----------------------------------------------------------------------------------

# Demande du mot de passe associé au compte :
echo -e "\033[34m \nVeuillez entrer son mot de passe : \033[0m \c"
read password

# Confirmation de la saisie du mot de passe :
echo -e "\033[34m \nVeuillez confirmer le mot de passe : \033[0m \c"
read motdepasse

# On verifie si les deux mots de passes sont identiques :
if test "$password" = "$motdepasse"

# On ajoute l'utilisateur grâce aux données récoltées:
then echo -e "\nCréation du compte..."
sleep 1
useradd -g "$groupe" -d /home/$utilisateur -p "$password" "$utilisateur"

else echo -e "\033[31m Les mots de passes ne sont pas identiques. \033[0m"
echo -e "\n=> Retour au menu général"
sleep 2
break

fi

# Vérification de la création de l'utilisateur :
verif='grep "^$utilisateur" /etc/passwd | cut -d: -f1'
if test -n "$verif"

then echo -e "\033[32mL'Utilisateur $utilisateur a bien été créé. \033[0m"
echo -e "\n=> Retour au menu général"
sleep 2
break

else echo -e "\033[31m Désolé une erreur est apparue. \033[0m"
echo -e "\n=> Retour au menu général"
sleep 3
break
fi

done
sh "faire.sh"


-------------------------------------------------------------------------------

Donc voila pour l'instant, Si jamais vous avez une remarques ou un suggestion pour me faire avancer et surtout savoir si je ne fais pas de grosses erreurs.
Par rapport à l'énoncé je me demande aussi si je fais bien tout les tests demandes.
0
jivef Messages postés 927 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 12 novembre 2020 306
23 juin 2011 à 04:13
Bonjour,
Bien, tu avances.
Attention aussi à un point
#!/bin/bash ne doit pas être précédé par d'autres ligne.
Cette ligne doit toujours être la première dans ton script, c'est elle qui définit l'interpréteur de commande que tu vas utiliser.
Bien cordialement.
Jonas.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
12 juin 2011 à 09:53
Salut,

Tiens voila un lien vers un post qui devrait t'aider pour ton programme, notamment pour la construction avec des fonctions, un menu principal et l'appel à des sous-menus...

En t'en inspirant tu devrais pouvoir améliorer ton script.

Bon courage ;-)
0