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

  1. #21
    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
    OK je vois mais du coup je ne vois pas comment implémenter cela

    Partons du principe que j'appelle 3 comptes : toto tata titi

    je lance mon script ./delete_dev_user.sh toto tata titi

    Si toto et tata existent mais pas titi comment faire dire au script
    toto et tata existent
    titi n'existe pas

    ???

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 726
    Par défaut
    la personne au préalable avant de lancer le script à déjà fait un cat /etc/passwd et s'aperçoit que des comptes n'ont plus vocation à exister
    ça pourrait être une fonction du script.

  3. #23
    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
    Citation Envoyé par saga974 Voir le message
    Si toto et tata existent mais pas titi comment faire dire au script
    toto et tata existent
    titi n'existe pas
    Il faut procéder en deux temps:
    1. d'abord une première boucle qui valide que chaque utilisateur existe
    2. ensuite, on passe à la suppression en batch pour autant qu'aucune erreur ne soit survenue en step 1

    Pour le step 1, on peut créer un tableau de valeurs, et on rajoute une entrée pour chaque utilisateur manquant, et à la fin on affiche le contenu de ce tableau.

  4. #24
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 872
    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 872
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par saga974 Voir le message
    Si toto et tata existent mais pas titi comment faire dire au script
    toto et tata existent
    titi n'existe pas

    ???
    Plusieurs solutions
    • comme le dit N_BaH, une fonction dédiée à la suppression d'un user X. Tu écris la fonction, tu la testes bien. Une fois testée, dans ta boucle principale tu checkes chaque user. Si le user existe tu le passes à la fonction et sinon tu dis "lui il a des baskets il rentre pas".
    • pareil mais sans fonction. Une boucle et si le user est incorrect tu l'affiches en erreur et tu passes au user suivant
      Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      for user in "$@"; do
      	si user pas correct, alors
      		affichage "user pas correct"
      		continue
      	fin si
      	traitement user (qui, ici, est correct)
      done
      Je préfère toutefois l'idée de fonction qui est plus dans l'esprit "découpage des tâches"
    • comme le dit binarygirl, tu fais un premier filtre et tu stockes les corrects à gauche et les mauvais à droite. Ensuite tu traites tous ceux de gauche et en final tu informes l'utilisateur que ceux de droite sont incorrects


    Code bash : 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
    #!/usr/bin/env bash
     
    delete_user() {
    	#sudo userdel -r "$1" 1>/dev/null 2>&1
    	echo "Suppression [$1]"		# Evidemment, je vais pas pourrir mon OS à supprimer réellement mes users !!!
    	return $?
    }
     
    verif_user() {
    	id -u "$1" 1>/dev/null 2>&1
    	return $?
    }
     
    rapport=""
    for user in "$@"; do
    	if ! verif_user "$user"; then
    		echo "User [$user] incorrect - Non traité"
    		continue
    	fi
     
    	if ! delete_user "$user"; then
    		echo "User [$user] non supprimé (erreur système)"
    		continue
    	fi
    	rapport="${rapport:+${rapport}, }$user"
    done
     
    echo "Les utilisateurs [$rapport] ont été supprimés"
     
    echo "Voulez-vous vérifier la réalité de la suppression (O/N) ?"
    read rep
    case "$rep" in
    	O|o)
    		for user in "$@"; do
    			verif_user "$user"\
    				&& echo "Bizarre, le user [$user] existe toujours ???"\
    				|| echo "OK, le user [$user] n'existe plus !!!"
    		done
    		;;
    esac

    Voilà un exemple de script possible. Il n'est pas parfait (par exemple il ne vérifie pas les doublons dans la liste, à la vérification finale il reprend tous les users y compris les incorrects et surtout je vais me faire pourrir par N_BaH pour ne pas avoir utilisé les tableaux qui auraient réglés ces soucis ) mais ça te donne une idée.
    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. #25
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 726
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 726
    Par défaut
    quand je parlais de fonction, je voulais parler d'une fonction qui ferait le travail de "remonter" depuis /etc/passwd les utilisateurs dont il faut supprimer les comptes (selon quel(s) critère(s) ?...).

    ensuite, on passe la liste à une boucle pour effectuer la suppression.
    ainsi, il n'y a plus de question à se poser sur l'existence d'un utilisateur dans /etc/passwd puisque la liste en est issue directement !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    critRsuppr() {
        : là on traite /etc/paswd pour remonter les comptes à supprimer
    }
     
    for user in $(critRsuppr /etc/passwd); do userdel ... "$user"; done

Discussions similaires

  1. [Shell] Bash : script de gestion d'utilisateurs
    Par techafi dans le forum Linux
    Réponses: 1
    Dernier message: 14/03/2008, 23h13
  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, 16h50
  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, 09h30
  4. Réponses: 2
    Dernier message: 24/05/2006, 14h00
  5. Probleme avec mon bash script
    Par spynux dans le forum Linux
    Réponses: 1
    Dernier message: 30/03/2006, 10h21

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