IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

bash script suppression utilisateur


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 129
    Par défaut bash script suppression utilisateur
    Bonjour,

    Je suis en train de réaliser un script bash permettant de supprimer des comptes utilisateurs sur une VM.

    Ce script n'est pas parfait et je cherche à l'améliorer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #!/bin/bash
     
    USERNAME=$1
     
     
    #Vérifier le compte de l'utilisateur à supprimer sur la VM
     
    if grep -q "$USERNAME" /etc/passwd;
    then
            echo -n "Confirmer le compte de la personne à supprimer : "
            read compte
    fi
     
    #Suppression utilisateur quittant ses fonctions au sein de l'équipe.
    for i in ${compte}
    do
            sudo userdel -r ${i}
            echo "le compte utilisateur $compte a bien été supprimé et n'existe plus dans les fichiers /etc/passwd /etc/group"
    done
     
     
    echo -e "Voulez-vous vérifier le fichier passwd [O/n] ?"
    read REP
     
    case $REP in
                 N|n)
                    exit
                 ;;
     
                 O|o|*)
                    echo -e " Constater la présence ou l'absence du fichier"
                    cat /etc/passwd
                 ;;
    esac

    pistes d'amélioration :

    - si j'indique un compte n'existant pas à l'appel du script je souhaiterais qu'il m'indique "ce compte n'existe pas"
    ex : ./delete_dev_user.sh toto


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ./delete_dev_user toto
    Ce compte n'existe pas. Rentrer un compte existant à supprimer

    Merci pour votre aide

  2. #2
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 129
    Par défaut
    J'ai apporté une modif qui fonctionne avec mon précédent message.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     #!/bin/bash
     2
     3 USERNAME=$1
     4
     5
     6 #Vérifier le compte de l'utilisateur à supprimer sur la VM
     7 if ! grep -q $USERNAME /etc/passwd;
     8 then
     9         echo "ce compte n'existe pas"
    10         exit
    11 else
    12         echo "le compte existe bien.Poursuite du script ..."
    13 fi
    14
    15 if grep -q "$USERNAME" /etc/passwd;
    16 then
    17         echo -n "Confirmer le compte de la personne à supprimer : "
    18         read compte
    19 fi
    20
    21 #Suppression utilisateur quittant ses fonctions au sein de l'équipe.
    22 for i in ${compte}
    23 do
    24         sudo userdel -r ${i}
    25         echo "le compte utilisateur $compte a bien été supprimé et n'existe plus dans les fichiers /etc/passwd /etc/group"
    26 done
    27
    28
    29         echo -e "Voulez-vous vérifier le fichier passwd [O/n] ?"
    30 read REP
    31
    32 case $REP in
    33                 O|o)
    34                  echo -e " Constater la présence ou l'absence du compte dans le fichier"
    35                  cat /etc/passwd
    36                 ;;
    37
    38                 N|n)
    39                 exit 0
    40                 ;;
    41 esac
    42
    43 echo -e "Voulez-vous vérifier le fichier group [O/n] ?"
    44 read REP1
    45
    46 case $REP1 in
    47              N|n)
    48                 exit
    49                 break
    50             ;;
    51
    52              O|o|*)
    53                 echo -e " Constater la présence ou l'absence du fichier"
    54                 cat /etc/group
    55             ;;
    56 esac

    En revanche je souhaiterais corrié un bug. En effet à cette partie du code ci dessous je souhaiterais lorsque je réponds "non" ou "n" ligne 29-30 le script aille à la question suivante. Ce qui n'est actuellement pas le cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     29 echo -e "Voulez-vous vérifier le fichier passwd [O/n] ?"
    30 read REP
    31
    32 case $REP in
    33                 O|o)
    34                  echo -e " Constater la présence ou l'absence du compte dans le fichier"
    35                  cat /etc/passwd
    36                 ;;
    37
    38                 N|n)
    39                 exit 0
    40                 ;;
    41 esac
    42
    43 echo -e "Voulez-vous vérifier le fichier group [O/n] ?"
    44 read REP1
    45
    46 case $REP1 in
    47              N|n)
    48                 exit
    49                 break
    50             ;;
    51
    52              O|o|*)
    53                 echo -e " Constater la présence ou l'absence du fichier"
    54                 cat /etc/group
    55             ;;
    56 esac

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    ne t'a-t-on pas encore parlé d'algorithme ?

    cela permet d'avoir une vision globale du déroulement du script, en détaillant de plus en plus finement (ça va de l'expression du besoin, à la rédaction de pseudo-code, en passant par le dessin de schémas/arbres décisionnels) toutes les opérations nécessaires à l'accomplissement de la tâche.
    l'algorithme est à rédiger avant d'écrire la moindre ligne de code.

    petit rappel : les noms de variables tout en majuscules sont, par convention, réservés aux variables d'environnement système (SHELL, HOME, LOGNAME, ...); les noms des variables définies par les utilisateurs peuvent être "panAchEs"
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par saga974 Voir le message
    Je suis en train de réaliser un script bash permettant de supprimer des comptes utilisateurs sur une VM.
    Pourquoi faire? Que fera-t-il de plus que userdel ne fait pas???

    Citation Envoyé par saga974 Voir le message
    3 USERNAME=$1
    Ok, et on lance le script sans argument... Ou alors (pourquoi pas) on le lance avec plusieurs utilisateurs et il ne traite que le premier...

    Citation Envoyé par saga974 Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     6 #Vérifier le compte de l'utilisateur à supprimer sur la VM
     7 if ! grep -q $USERNAME /etc/passwd;
    Super. Moi je l'appelle avec le paramètre "home", juste pour voir, et là la litanie des erreurs ça me crame les yeux direct...

    Citation Envoyé par saga974 Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     8 then
     9         echo "ce compte n'existe pas"
    10         exit
    11 else
    12         echo "le compte existe bien.Poursuite du script ..."
    Oh c'est trop bien ce "else" totalement inutile...

    Citation Envoyé par saga974 Voir le message
    for i in ${compte}
    Là je pige pas trop. Si "compte" c'est le compte à supprimer, à quoi sert cette boucle???

    Citation Envoyé par saga974 Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sudo userdel -r ${i}
    echo "le compte utilisateur $compte a bien été supprimé et n'existe plus dans les fichiers /etc/passwd /etc/group"
    Donc voilà, tu supprimes $i (sans checker si la suppression s'est bien faite) et tu affiches "$compte"

    Citation Envoyé par saga974 Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo -e " Constater la présence ou l'absence du compte dans le fichier"
    35                  cat /etc/passwd
    Ah oui, cash!!! Ton programme ne fait même pas le check. Il se contente juste d'afficher le fichier /etc/passwd et c'est à l'utilisateur de checker avec ses yeux si le compte y est ou n'y est plus
    Ca c'est un programme utile!!! Hautement calibré, aide à la décision et tout et tout...

    Citation Envoyé par saga974 Voir le message
    En revanche je souhaiterais corrié un bug.
    S'il n'y en avait qu'un...

    Citation Envoyé par saga974 Voir le message
    je souhaiterais lorsque je réponds "non" ou "n" ligne 29-30 le script aille à la question suivante. Ce qui n'est actuellement pas le cas.
    Normal, le "n" amène sur exit ce qui fait quitter le script...
    Mais bon, c'est qui qui l'a écrit ce "exit"? Il s'est écrit tout seul???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Faire un grep sur le fichier passwd pour vérifier l'existence de l'utilisateur est primitif. Cette implémentation n'est pas safe, on pourrait tomber sur un utilisateur qui n'est pas le bon, mais qui matche le pattern.

    On peut par exemple faire: id -u <user>et récupérer le exit code, si $? est différent de zéro l'utilisateur n'a pas été trouvé.
    Il y a aussi getent et d'autres méthodes auxquelles je ne pense pas.

    Il ne faut pas hésiter à faire une recherche sur Internet avant de réinventer la roue. Du genre: "Linux check user exists"

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    on peut faire un grep -q, mais il faut que le motif soit précis ^username:.

    primitif, primitif... traite-moi de réac' aussi* !

    --
    * ça fera l'équilibre avec ceux qui me traitent de gauchiste.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 129
    Par défaut
    Bonjour à tous

    Merci pour vos retours.

    Bon je vois que les débuts de mon script sont pas foufous.

    Je vais prendre en compte vos retours en essayant d'appliquer ce que vous dites mais je ne garantis pas comprendre tout.

    Pour répondre à certaines interrogations :
    - svear :
    - Pourquoi faire ? --> réponse m'exercer à rédiger un script. En effet, une simple commande userdel suffit mais l'automatisation je trouve ca sympa
    - oui l'idée d'appliquer le script pour supprimer plusieurs comptes en même temps serait bien à l'appel du script
    - pouquoi le else est-il inutile ? je trouve intéressant de dire que le compte existe. Qu'est-ce qui aurait été mieux de faire du coup ?
    - for i in ${compte} : compte c'est la variable que je veux reprendre lorsque j'affiche le compte à supprimer. Comment aurais-je dû faire si ce n'est pas bon dans le script ?
    - $-i : je ne comprends pas ta remarque j'affiche le résultat en demandant la consultation dans les fichiers plus bas dans le script


    - binarygirl :
    - justement je veux demander une confirmation du bon compte à supprimer avec la bonne syntaxe dans le script. J'essaye d'implémenter ca dans le script mais je n'y arrive pas malgré des tests

    - N_BaH :
    - si je fais un grep ^$USERNAME: /etc/passwd est-ce suffisant



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    #!/bin/bash
     
    USERNAME=$1
     
     
    #Vérifier le compte de l'utilisateur à supprimer sur la VM
    if ! grep -q ^$USERNAME: /etc/passwd;
    then
    	echo "Ce compte n'existe pas. Rentrer un compte existant à supprimer" 
    	exit
    else
    	echo "le compte existe bien.Poursuite du script..."
    	grep ^$USERNAME: /etc/passwd
    	sleep 2
    fi
     
    	echo -n "Confirmer le compte de la personne à supprimer : "
    	read compte
     
     
    #Suppression utilisateur quittant ses fonctions au sein de la team
    for i in ${compte}
    do
    	sudo userdel -r ${i} 
    	echo "le compte utilisateur $compte a bien été supprimé et n'existe plus dans les fichiers /etc/passwd /etc/group" 
    done
     
     
    	echo -e "Voulez-vous vérifier le fichier /etc/passwd [O/n] ?"
    read rep
     
    case $rep in
    	     O|o)
                     echo -e "Constater la présence ou l'absence du compte dans le fichier";
                     cat /etc/passwd;
    		;;
     
    	     N|n)
    		;;
    esac
     
     
    echo -e "Voulez-vous vérifier le fichier /etc/group [O/n] ?"
    read rep1
     
    case $rep1 in 
                 O|o)
                    echo -e "Constater la présence ou l'absence du fichier";
                    cat /etc/group;
                    ;;
     
                 N|n)
    		exit 1
                    ;;
    esac

Discussions similaires

  1. [Shell] Bash : script de gestion d'utilisateurs
    Par techafi dans le forum Linux
    Réponses: 1
    Dernier message: 14/03/2008, 22h13
  2. [MySQL] Suppression utilisateur d'une table
    Par djinko dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/12/2006, 15h50
  3. [MySQL] Suppression Utilisateurs de la BDD
    Par djinko dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/11/2006, 08h30
  4. Réponses: 2
    Dernier message: 24/05/2006, 13h00
  5. Probleme avec mon bash script
    Par spynux dans le forum Linux
    Réponses: 1
    Dernier message: 30/03/2006, 09h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo