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 :

Exercice Perso en Shell


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 10
    Par défaut Exercice Perso en Shell
    Bonjour/bonsoir à tous et toutes,

    je viens vers vous car j'ai un petit exo perso à faire, qui consiste à cela :

    J'ai un fichier csv qui est composé de :
    Identifiant,Nom,Prenom,Service,Fonction,Permanent,
    info1,Napo,Léon,info,Directeur,Oui,
    info2,Scripte,Perle,info,Responsable,Oui,
    info3,Scrout,Jessica,info,Employe,Oui,
    info4,Martin,Henri,info,Employe,Non,
    compta1,Terrieur,Alex,compta,Directeur,Oui,
    compta2,Eràk,Patrique,compta,Responsable,Oui,
    compta3,Personne,Jonathan,compta,Employe,Non,
    compta4,Demùsset,Alfred,Compta,Employe,Non,
    boss,MANVUSSA,Gérard,direction,Directeur,Oui,
    info5,Terrieur,Alain,info,Employe,Non,
    info4,Martin,Henri,info,Employe,Non,
    comm1,MANVUSSA,Gérard,commercial,Directeur,Oui,
    comm2,Despoireaux,Yvan,commercial,Employe,Oui,
    comm3,Trëchere,Yvan,commercial,Employe,Non,

    et je dois faire cela :

    Pour chaque service, créer un répertoire commun à l’ensemble des personnes du service.
    Dans le répertoire du service créer pour chaque utilisateur du service un répertoire personnel.
    Créer les utilisateurs en respectant les obligations suivantes :
    Pour les CDI (permanent) affecter un mot de passe et un login en mode shadow.
    Pour les CDD définir un compte provisoire pour 60 jours.


    du coup pour l'instant j'ai écris cela :

    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
     
    #!/bin/sh
    date_expire=`date -d "60 days" +%Y-%m-%d`
    while IFS=',' read Identifiant Nom Prenom Service Fonction Permanent
    do line="$Identifiant $Nom $Prenom $Service $Fonction $Permanent"
     
            if grep -q "$Service" "/etc/group" ;then
                    echo "$Service Trouvé"
            else
                    echo "creation du Groupe $Service"
                    groupadd $Service;
            fi
     
            if [ ! -d "/home/$Service" ];then
                    echo "Création du répertoire $Service";
                    mkdir /home/$Service
                    chown -R root:$Service /home/$Service
            fi
     
            if [ ! -d "/home/$Service/$Prenom$Nom" ];then
                    echo "Création Répertoire $Prenom$Nom";
                    mkdir /home/$Service/$Prenom$Nom
                    chown -R root:$Service /home/$Service/$Prenom$Nom
            fi
     
                    ##generation du password en curl ##
                    #pwd=`curl --silent http://www.sethcardoza.com/api/rest/tools/random_password_generator`
            #echo "$Permanent"
            if [ $Permanent = "oui" ];then
                    #echo "$Permanent"
                    pwd=`curl --silent http://www.sethcardoza.com/api/rest/tools/random_password_generator`
                    useradd "$Identifiant" -p "$pwd" -d "/home/$Service/$Prenom$Nom" -e "" -g "$Service"
                    chown -R "$Identifiant":"$Service" "/home/$Service/$Prenom$Nom"
                    else
                            useradd "$Identifiant" -p "$pwd" -d "/home/$Service/$Prenom$Nom" -e "$date_expire" -g "$Service"
                            chown -R "$Identifiant":"$Service" "/home/$Service/$Prenom$Nom"
            fi
     
     
     
    done < /home/toto/fichier-edit.csv
    J'arrive bien à créer les différents répertoires pour les services :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    drwxr-xr-x 24 root       root       4096 déc.  14 11:26 ..
    drwxr-xr-x  5 root       commercial 4096 déc.  15 08:43 commercial
    drwxr-xr-x  5 root       compta     4096 déc.  15 08:42 compta
    drwxr-xr-x  3 root       Compta     4096 déc.  15 08:42 Compta
    drwxr-xr-x  3 root       direction  4096 déc.  15 08:43 direction
    drwxr-xr-x  7 root       info       4096 déc.  15 08:43 info
    drwxr-xr-x  3 root       Service    4096 déc.  15 08:42 Service
    ainsi que les répertoires de chaques utilisateurs dans le service correspondant (exemple ici pour le service "compta"):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    drwxr-xr-x 2 compta1 compta 4096 déc.  15 08:42 AlexTerrieur
    drwxr-xr-x 2 compta3 compta 4096 déc.  15 08:42 JonathanPersonne
    drwxr-xr-x 2 compta2 compta 4096 déc.  15 08:42 PatriqueEr?k
    On constate que l'identifiant lié à l'utilisateur passe bien en paramètre lors du chown
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    own -R "$Identifiant":"$Service" "/home/$Service/$Prenom$Nom"
    Bref mon problème se trouve dans cette partie du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if [ $Permanent = "oui" ];then
                    #echo "$Permanent"
                    pwd=`curl --silent http://www.sethcardoza.com/api/rest/tools/random_password_generator`
                    useradd "$Identifiant" -p "$pwd" -d "/home/$Service/$Prenom$Nom" -e "" -g "$Service"
                    chown -R "$Identifiant":"$Service" "/home/$Service/$Prenom$Nom"
                    else
                            useradd "$Identifiant" -p "$pwd" -d "/home/$Service/$Prenom$Nom" -e "$date_expire" -g "$Service"
                            chown -R "$Identifiant":"$Service" "/home/$Service/$Prenom$Nom"
            fi
    J'ai l’impression que dans ma boucle if il n'arrive pas à check ma variable $Permanent = "oui" et passe direct au else.
    Pourtant quand je fais un echo de ma variable $Permanent au dessus de ma boucle if je constate bien que celle si contient soit oui ou non .. donc je comprends pas pourquoi il me l'a saute lors de la vérification..
    Je vois pas mon erreur donc si vous pouviez m'aider .. cela pourrait être sympa

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Bonjour,

    Ton problème est lié à la casse: tu check si c'est "oui" alors que dans ton fichier csv c'est "Oui"

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 10
    Par défaut
    je m'en suis rendu compte quand j'ai posté en effet, mais en faite ma variable récupére soit "Oui," soit "Non,"

    J'ai du coup testé en modifiant " .. = "Oui," mais rien n'y fait ..

    j'ai mis un echo comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if [ $Permanent = "Oui," ];then
                    echo "On est dans le THEN"
                    pwd=`curl --silent http://www.sethcardoza.com/api/rest/tools/random_password_generator`
                    #echo "ID:$Identifiant-PWD:$pwd-Prénom:$Prenom-Nom:$Nom" >> data-connexion.txt
                    useradd "$Identifiant" -p "$pwd" -d "/home/$Service/$Prenom$Nom" -e "" -g "$Service"
                    chown -R "$Identifiant":"$Service" "/home/$Service/$Prenom$Nom"
                    else
                    echo "On est dans le ELSE"
                            pwd=`curl --silent http://www.sethcardoza.com/api/rest/tools/random_password_generator`
                            useradd "$Identifiant" -p "$pwd" -d "/home/$Service/$Prenom$Nom" -e "$date_expire" -g "$Service"
                            chown -R "$Identifiant":"$Service" "/home/$Service/$Prenom$Nom"
            fi
    et comme je le pensais .. il passe direct au niveau du else, comme si il n'arrivait pas à effectuer le check ou qu'il ne fait pas le check correctement ...

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Ok, comme le "Oui," ou "Non," sont les dernier champs, tu dois avoir un fichier au format dos, donc le "Oui," est en fait "Oui,^M"
    qui est un control M ou "\r"

    Tu peux le verifier via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat -A /home/toto/fichier-edit.csv
    Si c'est le cas, essaye de modifier la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    done < /home/toto/fichier-edit.csv
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    done < <(sed -e 's/\r//' /home/toto/fichier-edit.csv)
    Enfin, si ton shell supporte cette écriture (bien respecter l'espace entre les 2 "<")

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 10
    Par défaut
    Ok je vais essayé ça et je te fais un retour

  6. #6
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour,

    un test de ce type est aussi possible (dans ton cas)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[ ${Permanent,,} =~ ^oui ]]; then
    a faire aussi sur "service" (forcer minuscule) car j'ai remarqué que tu as compta et Compta
    de plus ne pas oublier d'exclure l’entête

    l'appel a un service web pour générer un mot de passe est un peu fort ?
    avec /dev/urandom et/ou md5sum c'est possible

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 10
    Par défaut
    Bon après avoir réalisés plusieurs tests, j'ai finalement décidé d'utiliser en début de script :

    dos2unix /home/toto/fichier-edit.csv

    Et ainsi de filtrer ma variable $Permanent sur = "Oui" et cela fonctionne parfaitement maintenant... encore merci pour le rappel sur le "cat -A .."

    Merci Papajoker je vais tester le test de cet façon histoire de voir comment celui-ci fonctionne et le comprendre ^^ (je commence à peine le shell )

    Par contre pour le répertoire Compta et compta .. j'avais eu la même réflexion que toi .. en me disant "tiens le prof veux nous piéger (création de doublon etc..)" mais justement quand je lui ai montré il m'a dit que en effet cela était normal et qu'il voulait bien 2 folders "compta" et "Compta". ce que je trouve totalement ... bref

    Et pour la partie password je voulais faire quelques choses de vraiment "fun" pour dire "a tiens il a eu l'idée de faire ça comme sa". Je me suis dit que cela pouvait être fun (malgré que cela doit ajouter une certaines latence au script donc loin de moins l'idée de l'avoir fait dans l'optique de la performance).


    Merci pour votre aide maintenant je dois faire une sorte de fonction debug pour faire un logfile pour ce script..

Discussions similaires

  1. [Exercices] Liste d'exercices corrigés en shell script et bash
    Par ok.Idriss dans le forum Shell et commandes GNU
    Réponses: 47
    Dernier message: 10/03/2025, 14h09
  2. Exercice en bourne shell
    Par sk8trasher dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 03/03/2012, 18h35
  3. deux exercices de scripts shell à résoudre
    Par sadiqmrd dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 04/06/2011, 20h25
  4. Shell exercice débutant
    Par Larffas dans le forum Windows
    Réponses: 1
    Dernier message: 17/01/2007, 10h05
  5. Exercice linux shell
    Par satinrouge dans le forum Linux
    Réponses: 1
    Dernier message: 05/06/2006, 14h13

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