Bonjour à tous,
J'espère être dans la bonne section, je ne savais pas trop ou poster.

Je suis en train de me faire un petit script en bash pour mon planning de travail.

Étant totalement débutant, j'ai un soucis avec l'incrémentation de date.
je vous met le bout de script qui pose problème.

Si je fait :

echo -e "Quel est le jour d' utilisation ?"
read JOUR

echo -e "Quel est le mois d'utilisation ?"
read MOIS

ANNEE=2018
DATE="$ANNEE-$MOIS-$JOUR"

for i in {0..4}
do
   NEXT_DATE=$(date +%Y-%m-%d -d "$DATE + $i day")
   echo "$NEXT_DATE"
done

Si je met le 28-04, j'ai bien :

2018-04-28
2018-04-29
2018-04-30
2018-05-01

mais mon problème est si je fais :

echo -e "Quel est le jour d' utilisation ?"
read JOUR

echo -e "Quel est le mois d'utilisation ?"
read MOIS

echo -e "Nombre de jour ?"
read NBJOUR

ANNEE=2018
DATE="$ANNEE-$MOIS-$JOUR"

for i in {0..$NBJOUR}
do
   NEXT_DATE=$(date +%Y-%m-%d -d "$DATE + $i day")
   echo "$NEXT_DATE"
done

en mettant 28-04 et 4 jours, j'ai cette erreur : date: date incorrecte « 2018-04-28 + {0..4} day »

Voilà, j'ai essayé avec des apostrophes ou des guillemets mais rien ne fonctionne...

Merci d'avance pour votre aide

Marrant ce petit script 🙂
Tiens voilà :

#!/bin/bash

echo -e "Quel est le jour d' utilisation ?"
read JOUR

echo -e "Quel est le mois d'utilisation ?"
read MOIS

echo -e "Nombre de jour ?"
read NBJOUR

ANNEE=2018
DATE="$ANNEE-$MOIS-$JOUR"

#Initialise la boucle for avec tous les chiffre de 0 à $NBJOUR
for i in `seq 0 $NBJOUR`
do
   NEXT_DATE=$(date +%Y-%m-%d -d "$DATE + $i day")
   echo "$NEXT_DATE"
done

EDIT : TO DO
Prochaine étape contrôler que l’utilisateur ne rentre que 2 chiffres pour le jour et le mois qu'il ne rentre pas un chiffre supérieur à 31 en jour et 12 en mois.
Pouvoir lancer le script avec des arguments ./test-date.sh jour mois nbjourparce que ça va te lasser de taper a chaque fois les dates 🙂

    Banip
    Merci ! Top ce `seq'.

    Oui j'imagine que ça doit paraître simpliste comme script...
    [EDIT] :
    Oui c'est au programme, même si je suis le seul utilisateur.
    je pensais faire un truc genre si 4 ou avril alors 04
    L'idée de lancer le script avec argument c'est top aussi

      Kaoz52 Très franchement si tu débute je trouve que c'est bien réfléchi bien aéré, mes premier scripts n'étaient pas comme ça 🙂 et on a tous commencé par quelque chose.

      Si la réponse te conviens tu peux le sélectionner en meilleur réponse afin de passer ton sujet en résolu, si tu as d'autres questions n'hésite pas.

        Banip
        En fait j'ai un petit soucis,
        si j'utilise seq 1, j'ai un décalage de 1 jour
        pour 28-04 j'ai 29-04 et 30-04
        Et si je modifie en seq 0, j'ai une journée de trop
        pour 28-04 j'ai 29-04, 30-04 et 01-05

          Kaoz52 Je comprends pas trop ta demande :
          si tu seq 0 3 le programme va afficher J, J+1 J+2 J+3
          si tu seq 1 3le programme va afficher J+1, J+2, J+3

          Tu voudrais quoi pour le coup ?

          EDIT je crois avoir compris, tu peux simplement soustraire 1 à la variable entrée par l'utilisateur et laisser seq 0

            Banip
            C'est bon, j'ai ajouté une petite opération mathématique pour soustraire le jour de décalage et c'est tout bon
            Merci
            [EDIT] je viens de voir ton EDIT, du coup on est raccord

            9 jours plus tard

            Bon j'avance petit à petit sur mon script mais évidemment, je rencontre toujours quelques problèmes.
            Déjà j'ai abandonné l'incrémentation "simple" avec seq car la commande que je voulais lui attribué ne s'effectuait qu'à la première date (je ne sais pas si j'ai été clair...)

            Bref, je suis passé sur une boucle while.
            Cela fonctionne à peu prés mais je suis obligé de redéclarer une deuxième fois une variable. (A24016)

            DATE="$ANNEE-$MOIS-$JOUR" (mes variables $ANNEE, $MOIS et $JOUR sont déclarées plus tôt dans le script)
            A24016=$(commande avec ma variable $DATE)
            FINAL_DATE=$(date +%Y-%m-%d -d "$DATE + $NBJOUR2 day")
            
            #Execute la commande du calendrier du code correspondant pour le 1er jour
            $A24016
            
            while ((DATE!=FINAL_DATE))
            do
                    DATE=$(date +%Y-%m-%d -d "$DATE + 1 day")
                    echo $DATE
                    A24016=$(commande avec ma variable $DATE)
                    $A24016
            done

            Si je ne redéclare pas une deuxième fois cette variable, il ne prend en compte que la première.
            Existe t'il un moyen de "mettre à jour" une variable sans avoir à la retaper ?
            Peut-être avec function?

            [EDIT] : Je viens de tester avec function mais sans succès...

            J'espère être clair, en me relisant c'est pas évidant...

            Salut c'est encore moi 🙂 déjà OUI la variable while est bien mieux dans ton cas 🙂

            Par contre on manque de background pour répondre à ton problème. Quelle commande stock tu dans la variable A24016 ?

            A24016=$(commande avec ma variable $DATE)
            #Execute la commande du calendrier du code correspondant pour le 1er jour
            $A24016
            

            Finalement que dois-tu afficher à la fin ? Toutes les dates jus-qu’arriver à la date final $FINAL_DATE ?

            Alors en fait j'utilise un programme en python : https://github.com/tobixen/calendar-cli . Ça permet d'entrer un événement caldav en ligne de commande.
            Ma commande est comme ceci :
            calendar-cli.py --calendar-url=http://urldemonagendanextcloud/remote.php/dav/calendars/user/monagenda/ calendar add '2018-04-23T06:00+8h' 'TitreEvenement' --set-description 'AjoutdeDescription' --set-location 'LieuEvenement'

            La partie '2018-04-23T06:00+8h' correspond à :

            2018-04-23 Date de l'événement
            T06:00 Heure de début
            +8hDurée

            Ayant un planning changeant, cela me permettrai de gagner du temps pour remplir mon agenda.
            Voilà pour l'idée de départ.

            Je te met mon script complet.
            Il fonctionne mais le problème est que cette variable ($A24016) ne correspond qu'à une durée à un endroit. Je dois en avoir environ une vingtaines d'autres. Si je dois faire un while pour toutes, mon script va être énorme.

            #!/bin/bash
            
            #Questions pour Variables utiles
            echo -e "Code utilisation : \c"
            read CODE
            
            echo -e "Jour d'utilisation : \c"
            read JOUR
            
            #Choix du mois avec obligation de resultat à 2 chiffres entre 01 et 12
            MOIS=0
            until [ "$MOIS" = "01" ] || [ "$MOIS" = "02" ] || [ "$MOIS" = "03" ] || [ "$MOIS" = "04" ] || [ "$MOIS" = "05" ] || [ "$MOIS" = "06" ] || [ "$MOIS" = "07" ] || [ "$MOIS" = "08" ] || [ "$MOIS" = "09" ] || [ "$MOIS" = "10" ] || [ "$MOIS" =$
            do
                    echo -e "Mois d'utilisation : \c"
                    read MOIS
            done
            
            echo -e "Nombre de jour travaillé : \c"
            read NBJOUR
            
            #Complément de variables
            NBJOUR2=$(($NBJOUR-1))
            ANNEE=2018
            ANNEE2=$(($ANNEE+1))
            DATE="$ANNEE-$MOIS-$JOUR"
            FINAL_DATE=$(date +%Y-%m-%d -d "$DATE + $NBJOUR2 day")
            A24016=$(calendar-cli.py --calendar-url=http://urldemonagendanextcloud/remote.php/dav/calendars/user/monagenda/ calendar add ''$DATE'T06:00+8h' 'TitreEvenement' --set-description 'AjoutdeDescription' --set-location 'LieuEvenement')
            
            #Execute la commande du calendrier du code correspondant pour le 1er jour
            $A24016
            
            while ((DATE!=FINAL_DATE))
            do
                    DATE=$(date +%Y-%m-%d -d "$DATE + 1 day")
                    echo $DATE
                    A24016=$(calendar-cli.py --calendar-url=http://urldemonagendanextcloud/remote.php/dav/calendars/user/monagenda/ calendar add ''$DATE'T06:00+8h' 'TitreEvenement' --set-description 'AjoutdeDescription' --set-location 'LieuEvenement')
                    $A24016
            done

            Déjà pour tester si le mois est bon, bien dans l'idée mais mauvaise méthode : j'ai une solution je te la donne que si tu demandes. Indice je fais un while.

            Concernant ta commande A24016 je suppose que tu dois changer '2018-04-23T06:00+8h' 'TitreEvenement' 'AjoutdeDescription' 'LieuEvenement' ?

            Si oui il faudra passer par un while à chaque fois. Il sera plus judicieux de donner l'activité au script et tu pourra t'en sortir en un seul while MAIS tu devra appeler autant de fois ton script que tu as d'activité.

            Exemple : 
            ./script.sh 'Titre' 'Description' 'Lieu' 'jour de début' 'jour de fin' 'heure début' 'heure de fin'
            

            Puis tu appels X fois ton script... Je ne vois pas trop comment faire sinon

            Merci pour ta réponse.

            En fait là, à force d'être dessus, je pense avoir trouvé une solution qui semble fonctionner avec les functions
            Ça n'avait pas marché la première fois mais j'ai retenté et ça a fonctionné.
            Le truc c'est que je ne sait pas vraiment pourquoi puisque j'ai modifié plusieurs fois le script. Surement une histoire de placement.
            Donc je te fais voir ce que j'ai fais :

            Script Principal : calendar-cli.sh

            #!/bin/bash
            
            #Appel des functions enregistrées dans un autre fichier pour plus de clareté
            . functioncalendar-cli.sh
            
            #Questions pour Variables utiles
            echo -e "Code utilisation : \c"
            read CODE
            
            echo -e "Jour d'utilisation : \c"
            read JOUR
            
            #Choix du mois avec obligation de résultat à 2 chiffres entre 01 et 12
            MOIS=0
            until [ "$MOIS" = "01" ] || [ "$MOIS" = "02" ] || [ "$MOIS" = "03" ] || [ "$MOIS" = "04" ] || [ "$MOIS" = "05" ] || [ "$MOIS" = "06" ] || [ "$MOIS" = "07" ] || [ "$MOIS" = "08" ] || [ "$MOIS" = "09" ] || [ "$MOIS" = "10" ] || [ "$MOIS" =$
            do
                    echo -e "Mois d'utilisation : \c"
                    read MOIS
            done
            
            echo -e "Nombre de jour travaillé : \c"
            read NBJOUR
            
            #Complément de variables
            NBJOUR2=$(($NBJOUR-1))
            ANNEE=2018
            ANNEE2=$(($ANNEE+1))
            DATE="$ANNEE-$MOIS-$JOUR"
            FINAL_DATE=$(date +%Y-%m-%d -d "$DATE + $NBJOUR2 day")
            
            #Function pour afficher un résumé de ce que va éxécuter le script
            affichagemission
            #Execute la commande du calendrier du code correspondant pour le 1er jour avec function
            codeutilisation
            
            while ((DATE!=FINAL_DATE))
            do
                    DATE=$(date +%Y-%m-%d -d "$DATE + 1 day")
                    codeutilisation
            done

            Script Annexe pour function : functioncalendar-cli.sh (Version courte mais toutes les "missions" sont dans le même ordre d'idée)

            #!/bin/bash
            
            function codeutilisation
            
            {
            if [ "$CODE" = "N22002" ] ; then
                    calendar-cli.py --calendar-url=urldemoncalendrier/horaires-boulot/ calendar add ''$DATE'T06:00+8h' 'Mission01' --set-description 'N22002' --set-location 'LieuMission'
            elif [ "$CODE" = "N22004" ] ; then
                    calendar-cli.py --calendar-url=urldemoncalendrier/horaires-boulot/ calendar add ''$DATE'T14:00+8h' 'Mission02' --set-description 'N22004' --set-location 'LieuMission'
            elif [ "$CODE" = "N22006" ] ; then
                    calendar-cli.py --calendar-url=urldemoncalendrier/horaires-boulot/ calendar add ''$DATE'T22:00+8h' 'Mission03' --set-description 'N22006' --set-location 'LieuMission'
            else
                    echo "Code d'utilisation non reconnu"
            fi
            }
            
            function affichagemission
            {
            if [ "$CODE" = "N22002" ] ; then
                    echo -e "Matinée Mission01 à LieuMission pendant $NBJOUR jour(s)"
            elif [ "$CODE" = "N22004" ] ; then
                    echo -e "Soirée Mission02 à LieuMission pendant $NBJOUR jour(s)"
            elif [ "$CODE" = "N22006" ] ; then
                    echo -e "Nuit Mission03 à LieuMission pendant $NBJOUR jour(s)"
            else
                    echo "Code d'utilisation non reconnu"
            fi
            }

            Ce qui me donne à l’exécution de calendar-cli.sh :

            Code utilisation : N22002
            Jour d'utilisation : 23
            Mois d'utilisation : 04
            Nombre de jour travaillé : 3

            Matinée Mission01 à LieuMission pendant 3 jour(s)
            Added event with uid=7a3a4d88-46e5-11e8-97aa-d43d7e323c5e
            Added event with uid=7d6d0086-46e5-11e8-91b4-d43d7e323c5e
            Added event with uid=7e074f60-46e5-11e8-b5ad-d43d7e323c5e

            Je suis plutôt content du résultat mais ce n'est probablement pas un script très propre.

            En revanche je suis très intérréssé pour pouvoir lancer mon script avec les arguments.
            Par ex :
            ./calendar-cli.sh N22002 23 04 3

            J'ai regardé vite fait sur le net mais j'avoue ne pas trop comprendre, ça me parle de $1 $2 mais je ne vois pas ou mettre ça dans mon script. (J'avoue ne pas encore avoir regardé à fond).

            Encore merci pour le temps que tu m'accordes

              Kaoz52 Tant mieux si tu t'en es sorti 🙂

              Concernant les arguments c'est très simple crée un autre script pour voir le fonctionnement comme ça tu casses pas tout :

              #!/bin/bash
              
              # Ici tu peux récupérer autant d’arguments que tu passera à ton script
              ARG1=$1
              ARG2=$2
              ARG3=$3
              ARG4=$4
              
              echo "$ARG1 $ARG2 $ARG3 $ARG4"
              
              exit 0
              

              puis tu lances ./test-arg.sh N22002 23 04 3 tu comprendra facilement je pense 🙂

              Merci pour ton aide, j'ai réussi !
              Par contre j'ai quand même galéré. J'ai compris le principe mais je n'arrivais pas à le mettre en place.
              J'ai reussi grace un bout de code posté sur un forum anglais (que je n'ai pas noté malheureusement).

              En gros j'ai fais ça pour chaque paramètre :

              if [ $# -eq 0 ] ; then
                      echo -e "Jour d'utilisation : \c"
                      read JOUR
              else
                      JOUR=$2
              fi

              Peut-être qu'il y a plus simple mais sans ce if, je n'y arrivais pas.

              Je te remercie beaucoup pour ton aide, je vais essayer de peaufiner ça mais l'essentiel est là, ça marche !

              Juste une petite question, au hasard de mes recherches je suis tombé sur ça : http://websocketd.com/
              Est que quelqu'un connais et surtout est-ce que c'est compliqué à mettre en place ? Une interface ça serait vraiment top et je pourrai du coup proposer ça à mes collègues (mais on en est pas là).

                Kaoz52 Oui il faut que tu t'assures que ton utilisateur ait bien entré X arguments ou le demander en prompt. Par contre sans le if tu dois quand même pouvoir récupérer l'argument numéro 1 comme je l'ai indiqué dans mon message précédent...

                Il serait plus propre de faire ainsi (à retester de mémoire c'est ça mais...)

                # Test si l'argument est vide
                # A répéter autant de fois que tu as d'arguments
                if [ -z $1 ] ; then
                        echo -e "Jour d'utilisation : \c"
                        read JOUR
                else
                        JOUR=$2
                fi
                

                Je connais pas websocketd mais à mon avis ton script deviendra beaucoup plus compliqué si tu inclus plusieurs utilisateurs

                Je me permets de double poste car pour plus de visibilité. Voici comme je commencerais mon script si j'avais à vérifier que l'utilisateur indique bien les bonnes choses dans les arguments : script_kaoz52.sh

                Tu peux t'en inspirer le copier entièrement ou partiellement, il est adapté à ce que tu demandes à l'heure actuelle. Tu peux le modifier si dans le future tu ajoutes X ou Y chose.

                Si tu ne comprends pas certaines méthodes certains choix etc n'hésites pas. De plus si d'autre passe par ici et veulent améliorer la chose aucun problème.

                  Banip
                  Désolé, je ne viens de voir que maintenant ton 2ème post.
                  Merci beaucoup, il faut que j'étudie ça car à première vue je ne capte pas tout. (j'ai vu un tail par ex)
                  Je l'ai quand même lancé et il faut que je regarde comment tu as fait pour "forcer" le mois, ça a l'air plus propre que moi.
                  Par contre je ne suis pas fan de la liste des missions, comme je te l'ai dit il y en a + d'une vingtaine donc ça fait un peu long à lister.
                  Et il n'y a pas besoin d'entrer l'heure puisque chaque mission correspond à une plage horaire précise.
                  Mais j'ai bien compris que c'était un exemple dont il fallait que je m'inspire et c'est ce que je vais faire.
                  Le problème (pour toi) est qu'il y a des chances que je repasse pour te poser des questions...

                  Concernant websocketd c'est vraiment pas mal, en tout cas la partie console, je n'ai pas encore réussi à le faire fonctionner en mode 'html', ça me permettra d’exécuter mon script sur un navigateur quand je serai au boulot.
                  Et pour finir, je ne le ferai pas multi utilisateur et je ne proposerai pas non plus à mes collègues, trop de "service après-vente" en vue...

                  Merci vraiment pour ton aide !

                    Kaoz52 Le problème (pour toi) est qu'il y a des chances que je repasse pour te poser des questions...

                    Ahah AUCUN PROBLEME, c'est toujours un plaisir pour moi. En fait j'adore cet aspect du métier j'ai tout un tas de script afin de m'aider dans mes taches quotidiennes.

                    Même s'il n'est pas abouti j'avais même commencé un pendu en bash... il faudrait d'ailleurs que je le finisse 😂

                    Kaoz52 j'ai vu un tail par ex

                    C'est une commande pour afficher les X premières ligne d'un fichier. tail -10 fichier.txt
                    tail sert aussi pour afficher un fichier avec les modifications en direct tail -f fichier.txt très utile pour surveiller les log sur un serveur.
                    Enfin dans mon cas, même si tu ne te sers pas de la liste d'activité, tailcouplé à head permet une chose merveilleuse : afficher LA ligne n°X d'un fichier

                    cat fichier.txt |head -42 |tail -1 # affiche la ligne 42 du fichier txt
                    # Autre façon d'écrire
                    head -42 fichier.txt |tail -1
                    

                    Kaoz52 Concernant websocketd c'est vraiment pas mal, en tout cas la partie console, je n'ai pas encore réussi à le faire fonctionner en mode 'html', ça me permettra d’exécuter mon script sur un navigateur quand je serai au boulot.

                    Et bien du coup merci pour la découverte, ça va me permettre de passer certain de mes scripts en accès web 🙂

                    Et pour finir, je ne le ferai pas multi utilisateur et je ne proposerai pas non plus à mes collègues, trop de "service après-vente" en vue...

                    Peut-être plus tard 😉

                    Kaoz52 Je l'ai quand même lancé et il faut que je regarde comment tu as fait pour "forcer" le mois, ça a l'air plus propre que moi.

                    Alors là c'est très simple et c'est le même principe que pour les jours

                    # si l’argument 3 est vide il faut demander le mois à l'utilisateur
                    if [ -z $3 ] ; then
                            # Ici tant que l'utilisateur saisie un mois à 0 ou un mois plus grand que 12 (décembre) 
                            # alors je redemande
                            while [ $MOIS -eq 0 ] || [ $MOIS -gt 12 ]
                            do
                                    echo -e "Choix mois : \c"
                                    read MOIS
                            done
                    else
                            # Ici l'argument 3 du script existe donc on ne demande pas à l'utilisateur quel mois il veut
                            # Par contre on doit vérifier ce qu'il a entré car on ne peut pas faire confiance 
                            # aux utilisateurs
                            # Première étape combien de caractères sont contenus dans $3 ?
                            verif=$(echo $3 |wc -c)
                            # Ensuite si l'utilisateur a saisi son mois sur 1 caractère (janvier peut s'écrire 01 ou 1) 
                            if [ $(($verif-1)) -eq 1 ] ; then
                                    # Alors on ajout 0 devant la saisie afin d'être dans la norme ainsi 1 devient 01
                                    MOIS="0$3"
                            # Attention Ici on vérifie que l'utilisateur n'ait pas entré un nombre trop grand 
                            # par exemple 001 ou si son nombre n'est pas supérieur à 12 (décembre)
                            elif [ $(($verif-1)) -gt 2 ] || [ $3 -gt 12 ] ; then
                                    # S'il s'avère que lu'itilsateur a fait une saisie tel quel 002 ou > 12
                                    # il vaut mieux quitter le script 
                                    echo "$3 ne respecte pas la condition"
                                    exit 1
                            else
                                    # Sinon on récupère ce que l'utilisateur à saisie en argument 3
                                    # Car on est sur du contenu (a moins que je n'ai pas pensé a une possibilité ???)
                                    MOIS=$3
                            fi
                    fi
                    

                      Salut
                      Par rapport à l'exemple et au cat qu'on peut zapper:

                      cat fichier.txt |head -42 |tail -1 # affiche la ligne 42 du fichier txt
                      # Autre façon d'écrire
                      head -42 fichier.txt |tail -1

                      Faut tenter d'aller toujours direct au plus propre et simple, parole du gars qui a bien transpiré quand il a décidé de reprendre bonobox.sh qui avait était commencé à la hache et au burin sans rien y connaitre.
                      C'est vraiment galère après pour remettre de l'ordre, depuis j'y fais très attention... ^^

                      il y a un truc super pour ça, c'est de passer son code régulièrement avec shellcheck (pour ceux qui ne connaissent pas encore évidemment): https://www.shellcheck.net/
                      C'est magique avec des exemples très parlant sur les erreurs et les trucs pas top. Juste un peu déprimant au début quand tu vois les 3000 erreurs qui clignotent mais on s'y fait et on apprend plein de machins au passage ! 😃
                      Ex.

                        Pour l'exemple du test d'arguments, voici un script que j'ai écris qui rajoute un utilisateur dans un openldap via une ligne de commande:

                        Il peut-être intéressant car nécessite 4 arguments et chacun est testé selon des critères précis. Comme j'en ai un peu chié pour trouver certaines règles de tests, je me dit que ça peut aider 😉

                        cat ldap_adduser.sh
                        
                        #!/bin/bash
                        # Ce script ajoute un utilisateur dans le LDAP
                        #
                        # Deux manières de l'utiliser :
                        #   En ligne de commande ( ! Respecter l'ordre ! ):
                        #     ./adduser.sh Prénom Nom Code addresse@mail
                        
                        # Paramètres de connexion au serveur LDAP
                        LDAP=ldapprod
                        PORT=389
                        USER="cn=ldapadmin,dc=aaa,dc=xxxx,dc=fr"
                        PASS=XXXXXXXXX
                        BASEDN="dc=aaa,dc=xxxx,dc=fr"
                        
                        # Rappel d'utilisation si script exécuté à vide:
                        if [ -z "$1" ]; then
                          echo ""
                          echo "Cette commande rajoute automatiquement un utilisateur dans le LDAP."
                          echo ""
                          echo "Utilisation:"
                          echo "ldapuser Prénom Nom Code addresse@mail"
                          echo ""
                          exit 1
                        fi
                        
                        # Rappel d'utilisation s'il n'y a pas le bon nombre d'arguments:
                        if [ -z "$4" ]; then
                          echo ""
                          echo "ERREUR: Cette commande nécessite 4 arguments."
                          echo ""
                          echo "Cette commande rajoute automatiquement un utilisateur dans le LDAP."
                          echo ""
                          echo "Utilisation:"
                          echo "ldapuser Prénom Nom Code addresse@mail"
                          echo ""
                          exit 1
                        fi
                        
                        # Le troisième argument doit être uniquement formé de chiffres:
                        case $3 in
                          ''|*[!0-9]*)
                          echo ""
                          echo "ERREUR: Le troisième argument doit être un nombre entier (code)."
                          echo ""
                          echo "Cette commande rajoute automatiquement un utilisateur dans le LDAP."
                          echo ""
                          echo "Utilisation:"
                          echo "ldapuser Prénom Nom Code addresse@mail"
                          echo ""
                          exit 1
                          ;;
                        esac
                        
                        # Le quatrième argument doit être une adresse mail:
                        regex="^[a-z0-9!#\$%&'*+/=?^_\`{|}~-]+(\.[a-z0-9!#$%&'*+/=?^_\`{|}~-]+)*@([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]([a-z0-9-]*[a-z0-9])?\$"
                        
                        if [[ ! $4 =~ $regex ]] ; then
                          echo ""
                          echo "ERREUR: Le quatrième argument doit être une adresse mail."
                          echo ""
                          echo "Cette commande rajoute automatiquement un utilisateur dans le LDAP."
                          echo ""
                          echo "Utilisation:"
                          echo "ldapuser Prénom Nom Code addresse@mail"
                          echo ""
                          exit 1
                        fi
                        
                        # Test pour vérifier que le code APH n'existe pas déjà:
                        UID_CHECK=$(ldapsearch -h $LDAP -p $PORT -D $USER -w $PASS -b $BASEDN -LLL uid=$3 dn)
                        if [ ! -z "$UID_CHECK" ]; then
                          echo " "
                          echo "ERREUR:"
                          echo " Ce numéro existe déjà dans la base et est utilisé par l'entrée suivante :"
                          echo " $UID_CHECK"
                          echo ""
                          echo "Merci de vérifier et de corriger."
                          exit 1
                        fi
                        
                        # Récupère le dernier numero uidNumber:
                        LAST_UID=$(ldapsearch -h $LDAP -p $PORT -D $USER -w $PASS -b $BASEDN -LLL uidNumber=* uidNumber | grep uidNumber | grep -v 900000 | awk -F: '{print $2}' | sort -n | tail -n 1)
                        UIDNUMBER=$((LAST_UID+1))
                        
                        # Récupère les informations du compte à créer
                        FIRSTNAME="$1"
                        LASTNAME="$2"
                        NUMBER="$3"
                        EMAIL="$4"
                        
                        # Transformation du nom et du prénom en majuscule:
                        FIRSTNAMECAPS=$(echo "$FIRSTNAME" | tr '[:lower:]' '[:upper:]')
                        LASTNAMECAPS=$(echo "$LASTNAME" | tr '[:lower:]' '[:upper:]')
                        
                        # Création du fichier utilisateur:
                        PWD_ORI=$(pwd)
                        cd /root/scripts
                        cp user.ldif "$FIRSTNAME $LASTNAME $NUMBER.ldif"
                        sed -i "s@1STNAME@$FIRSTNAMECAPS@g" "$FIRSTNAME $LASTNAME $NUMBER.ldif"
                        sed -i "s@LASTNAME@$LASTNAMECAPS@g" "$FIRSTNAME $LASTNAME $NUMBER.ldif"
                        sed -i "s@NUM@$NUMBER@g" "$FIRSTNAME $LASTNAME $NUMBER.ldif"
                        sed -i "s@LOWLAST@$LASTNAME@g" "$FIRSTNAME $LASTNAME $NUMBER.ldif"
                        sed -i "s@LOW1ST@$FIRSTNAME@g" "$FIRSTNAME $LASTNAME $NUMBER.ldif"
                        sed -i "s/MAILADDR/$EMAIL/g" "$FIRSTNAME $LASTNAME $NUMBER.ldif"
                        sed -i "s@999999@$UIDNUMBER@g" "$FIRSTNAME $LASTNAME $NUMBER.ldif"
                        
                        # Création de l'utilisateur dans le LDAP:
                        ldapadd -x -h $LDAP -p $PORT -D $USER -w $PASS -f "$FIRSTNAME $LASTNAME $NUMBER.ldif"
                        
                        # Vérification et confirmation:
                        UID_CHECK=$(ldapsearch -h $LDAP -p $PORT -D $USER -w $PASS -b $BASEDN -LLL uid=$3 dn)
                        if [ -z "$UID_CHECK" ]; then
                          cd "$PWD_ORI"
                          echo ""
                          echo "ERREUR: L'utilisateur n'a pas été créé correctement."
                          echo "Vérifiez dans le LDAP."
                          exit 1
                        else
                          mv "$FIRSTNAME $LASTNAME $NUMBER.ldif" "Utilisateurs LDAP"/
                          cd "$PWD_ORI"
                        
                          echo " "
                          echo "L'utilisateur $FIRSTNAME $LASTNAME a bien été ajouté dans le LDAP."
                          echo "Informations pour la ged:"
                          echo " Nom          : $LASTNAME"
                          echo " Prénom       : $FIRSTNAME"
                          echo " Login        : $NUMBER"
                          echo " Courriel     : $EMAIL"
                          echo " Mot de passe : xxxxxxx1"
                          echo " "
                          exit 0
                        fi