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 :

Problème sur un script


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Août 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 2
    Par défaut Problème sur un script
    Bonjour,
    Donc avec l'aide d'une personne j'ai écrit ce script.
    Il a pour but de mettre a jour les absences et retards dans une base de données mysql.
    Je l'ai remodifier plusieurs fois de différentes manières concernant la ligne des retards car celle-ci ne fonctionne pas comme elle devrait.
    Il est fort possible que je me sois trompé dans la synthaxe mais je n'arrive pas à trouver, si quelqu'un a une solution a mon problème merci de me la communiquer.
    L'heure a partir de laquelle le prochain scan sera compté comme en retard se situe sur une autre table de ma database.

    Ma database: IDBT
    La table des utilisateurs: Students
    La table des horaires: Horaire6Qinf
    La colonne ID_Horaire est présente dans les 2 tables.
    Last_Scan: heure du dernier scan

    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
    #!/bin/bash
     
     
    ID=""
    LASTSCAN=""
    NOM=""
    PRENOM=""
     
    mapfile result < <(mysql --user="dev" --password="123456" --database="IDBT" -se  "select Nom,Prenom ,IDStudent,TIME(Last_Scan) from Students ")
     
    for row in "${result[@]}";do
     
    IFS='	' read -r -a array <<< "$row"
     
        echo "Calcul de : "${array[0]}" "${array[1]}"" 
     
    	NOM=${array[0]}
    	PRENOM=${array[1]} 
    	ID=${array[2]}
    	LASTSCAN=${array[3]}
     
        #!récupérer les horaires
     
        mapfile ho < <(mysql --user="dev" --password="123456" --database="IDBT" -se  "select Horaire6Qinf.ID_Horaire from Horaire6Qinf,Students where Students.ID_Horaire = Horaire6Qinf.ID_Horaire")
     
        IFS='	' read -r -a tbho <<< "$ho"
     
        NUM_JOUR=1 
     
        HEURE_HORAIRE=${tbho[$NUM_JOUR]}
     
        #!"$(date +%u)"
     
    	echo " Heure d'arrivée : "$LASTSCAN
     
    	if [ "$LASTSCAN" == 'NULL' ]
    	then
     
     
     
    		mysql --user="dev" --password="123456" --database="IDBT" --execute="UPDATE Students  set Absence = Absence+1 where IDStudent ="$ID" ; "
    	 #!echo "---> Absent"
    	fi
    	if [ TIME"$LASTSCAN" > '$HEURE_HORAIRE' ] 
    	then
     
    		mysql --user="dev" --password="123456" --database="IDBT" --execute="UPDATE Students  set Retard = Retard+1" where [ TIME"$LASTSCAN" >= '$HEURE_HORAIRE' ]
    	fi
     
     
    done

  2. #2
    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
    Bonjour,

    il faut protéger les guillemets intérieurs pour qu'ils apparaissent dans la commande sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            mysql --user="dev" --password="123456" --database="IDBT" --execute="UPDATE Students  set Absence = Absence+1 where IDStudent =\"$ID\" ; "
    heu ? du shell dans une expression sql ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            mysql --user="dev" --password="123456" --database="IDBT" --execute="UPDATE Students  set Retard = Retard+1" where [ TIME"$LASTSCAN" >= '$HEURE_HORAIRE' ]
    et l'expression n'est pas terminée.

    encore une, kézako ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	if [ TIME"$LASTSCAN" > '$HEURE_HORAIRE' ]
    pour comparer des nombres il faut utiliser les opérateurs arithmétiques (cf. help test).

    mais, plutôt que d'utiliser un tableau (result) :[code]while read line
    do
    :things with $line
    done < <(mysql ... -se 'select ...')
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Août 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 2
    Par défaut
    Après le lancement du script j'obtiens ceci, L'horaire du jour (lundi) normalement, devrait compter leurs scan comme étant 2 retards et 1 absent sauf que il n'y a que l'absence qui est compté pour le NULL, les 2 autres n'ont rien. Et ils devraient avoir +1 dans leur colonne retard...Je ne peux pas expliquer mon script j'arrive a peine à le comprendre..



    Calcul de : Jean Boite
    Heure d'arrivée : 16:28:28
    Calcul de : Jack Tive
    Heure d'arrivée : NULL
    Calcul de : Joe Pere
    Heure d'arrivée : 16:28:19

  4. #4
    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
    « ah, mais il faut tout brûler, ma petite dame. C'est moisi partout, il y a des termites, et des renards ont fait leur nids. »

    je crois qu'il faut que tu apprennes, désolé, les B-A-BA de ce que peut faire mySQL (entre autre : croiser les informations contenues dans plusieurs tables pour en mettre l'une, ou une autre, à jour en fonction du contenu des champs).

    il n'y aura alors plus (ou beaucoup moins) de commandes shell, et une énorme (déconcertante) commande mySQL, qui effectuera les comparaisons et le traitement correspondant aux différents cas.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. problème sur un script Shell
    Par hindou90 dans le forum Linux
    Réponses: 3
    Dernier message: 06/02/2011, 20h52
  2. [PDF] Problème sur un script MySQL/pdf
    Par runcafre91 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 05/04/2010, 23h28
  3. [MySQL] Plusieurs problèmes sur mon script ( création d'un forum) php
    Par safadkhi dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 02/07/2009, 08h03
  4. Problème sur ancien script
    Par telyweb dans le forum Langage
    Réponses: 1
    Dernier message: 05/09/2008, 16h48
  5. Réponses: 3
    Dernier message: 01/03/2007, 10h18

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