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 :

Utiliser les valeurs d’une base de données


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut Utiliser les valeurs d’une base de données
    Bonjour

    J'ai encore une question

    Est-il possible d’utiliser les valeurs d’une base de données pour remplacer l’IP, le nom d’utilisateur et le mot de passe de l'url ?

    J’ai essayé de modifier le script comme ci–dessous, j’arrive à me connecter et voir la table HD1 de la base de données cam mais je n’arrive pas à placer les valeurs dans l’url.


    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
    #!/bin/sh 
    ### BEGIN INIT INFO 
    # Provides: foscam
    # Required-Start: $remote_fs $syslog 
    # Required-Stop: $remote_fs $syslog 
    # Default-Start: 2 3 4 5 
    # Default-Stop: 0 1 6 
    # Short-Description: Start daemon at boot time 
    # Description: Enable service provided by daemon. 
    ### END INIT INFO
     
    requete="SELECT IP,utilisateur,motdepass FROM HD1"
    mysql -u"root" -p"MOTDEPASSE" cam -e"$requete" 
     
     
    case "$1" in 
     
    stop) 
    	# stop motion foscam 
    	echo "Motion stop" 
    echo ".['IP']."
     
    	curl "http://.['IP']./cgi-bin/CGIProxy.fcgi?usr=.['utilisateur'].&pwd=.['motdepass'].&cmd=setMotionDetectConfig&isEnable=0"
    	;;

    Avec echo ".['IP']." j'obtiens .['IP'].

    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    Bonjour,

    a priori, tu dois utiliser une Substitution de commandes, dans une variable, ou un tableau.

    quelle est la sortie de commande mysql (pour décider : variable ou tableau) ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut
    Avec mon bout de code voilà ce que me retourne MySQL Nom : mysql.jpg
Affichages : 123
Taille : 12,5 Ko.

    J'espère avoir répondu à votre question

    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    il y a une/des option(s) pour ne pas afficher l'en-tête et la "trame" autour des données.

    vu que t'es en sh, pas de tableau !
    quand tu te seras affranchi du format de la sortie de mysql, tu pourras lire les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    read ip usr paswd <<eof
    $(mysql ...)
    eof
    et utiliser $ip, $usr, $paswd.

    mais... t'es sûr de vouloir utiliser tout un Système de Gestion de Base de Données Relationnelle pour stocker trois petites informations ? ça me paraît disproportionné.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut
    Si je comprends bien, il faut que j’isole 192.168.1.11:88, admin et admin et à partir de là je pourrais utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    read ip usr paswd <<eof
    $(mysql ...)
    eof
    Je dois ajouter ce code à la suite de ce que j’ai déjà fait ??

    J’utilise une base de données car j’ai fait un petit site intranet avec formulaire qui permet d’ajouter plusieurs cameras cela me permet d’avoir à éviter de bidouillé dans le système car j’utilise aussi plusieurs pages html qui me sert à visualiser et contrôler les cams

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut

    il faut affecter les variables avant de s'en servir.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut
    Oui ok pour les variables !!

    Je vous tiens au courant de l'évolution

    Merci beaucoup

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut
    C’est parfait cela fonctionne , j’ai pu enlever le nom des colonnes avec --skip-column-names voici un morceau du script :

    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
    #!/bin/sh 
    ### BEGIN INIT INFO 
    # Provides: foscam
    # Required-Start: $remote_fs $syslog 
    # Required-Stop: $remote_fs $syslog 
    # Default-Start: 2 3 4 5 
    # Default-Stop: 0 1 6 
    # Short-Description: Start daemon at boot time 
    # Description: Enable service provided by daemon. 
    ### END INIT INFO
     
     
     
     
    case "$1" in 
     
    stop) 
    	# stop motion foscam 
    	echo "Motion stop"
     
    read ip usr passwd <<eof
    $(mysql -u"root" -p"PASSWORD" --skip-column-names -e"connect cam; SELECT IP,utilisateur,motdepass FROM HD1")
    eof
     
    	curl "http://$ip/cgi-bin/CGIProxy.fcgi?usr=$usr&pwd=$passwd&cmd=setMotionDetectConfig&isEnable=0"
    	;;



    J’aurai une dernière question, comme j’ai plusieurs cameras avec des informations différentes et que je ne veux pas les activer en même temps, pensez-vous qu’il est préférable de créer plusieurs scripts ou plusieurs fonctions dans le même script ?

    exemple :

    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
    #!/bin/sh 
    ### BEGIN INIT INFO 
    # Provides: foscam
    # Required-Start: $remote_fs $syslog 
    # Required-Stop: $remote_fs $syslog 
    # Default-Start: 2 3 4 5 
    # Default-Stop: 0 1 6 
    # Short-Description: Start daemon at boot time 
    # Description: Enable service provided by daemon. 
    ### END INIT INFO
     
    case "$1" in 
     
    stop_HD1) 
    	code
    	;; 
     
    stop_HD2) 
    	code
    	;;    
    ETC.....
    Merci pour votre aide !

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    Citation Envoyé par pierre2302
    j’ai plusieurs cameras avec des informations différentes et que je ne veux pas les activer en même temps, pensez-vous qu’il est préférable de créer plusieurs scripts ou plusieurs fonctions dans le même script ?
    un seul script auquel tu passes en argument la/es référence(s) de la/es caméra(s) que tu veux activer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    RefCam="$2"
    case "$1" in 
       stop) 
          # stop motion foscam
          echo "Motion stop"
          read ip usr passwd <<eof
    $(mysql -u"root" -p"PASSWORD" --skip-column-names -e"connect cam; SELECT IP,utilisateur,motdepass FROM $RefCam")
    eof
          curl "http://$ip/cgi-bin/CGIProxy.fcgi?usr=$usr&pwd=$passwd&cmd=setMotionDetectConfig&isEnable=0"
       ;;
    s'il y en a plusieurs, il faudra s'y prendre autrement; en shiftant dans le case, et en utilisant une boucle for sur le reste des arguments, afin de répéter les mêmes commandes pour chacune.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut
    Je souhaiterais pouvoir gérer 4 cameras, j'utilise 1 table différentes pour chaque caméras ( HD1, HD2, ... ).

    Donc je pense qu'il vaut mieux que j'utilise la structure case, mais il me semble que c'est difficile à mettre en œuvre.

    J’ai fait quelque recherche sur cette structure, apparemment il faut que je définisse une variable et en fonction de sa valeur cela exécutera une commande. Mais je ne vois pas comment définir cette variable qui prendra la valeur de ma requête si j’ai bien compris !!

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    Citation Envoyé par pierre2302
    j'utilise 1 table différentes pour chaque caméras
    Citation Envoyé par NBaH
    ça me paraît disproportionné.
    comment ça je radote !?

    une table est censée stocker des données relatives à des "objets" similaires... ici, tes caméras !
    tu devrais n'avoir qu'une table; tu y retrouveras chaque caméra par un identifiant unique (nom, numéro...).

    le case demeure : il continuera à tester le premier argument.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut
    Je n'en doute pas que ce n'est pas la bonne méthode d'utiliser autant de table , mais j'ai procédé ainsi car ça me semblait plus facile à mon niveau !!

    j'ai découvert linux et effectuée ma 1ere connexion ssh il y a 1 an et demi !!

    Je vais voir d’améliorer mon système en enregistrant le tout dans une seul table. En tout cas la programmation c’est complexe mais prenant.

  13. #13
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 294
    Par défaut
    Bonjour

    "1 table par caméra" montre de sérieuses lacunes en base de données. Pas en GNU Linux.

    Après, l'idée n'est pas non plus de faire une seule table fourre-tout. Tu peux faire une tables pour les caméras, une table pour les photos qu'elles prennent, une table pour les configurations ...

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut
    Ok merci !! Je vais demander un peu d’aide dans la catégorie PHP ( Formulaire & MySQL )

    Si ça vous intéresse vous pourrez voir le truc minable que j’ai fait

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut
    Ça y'est je n'utilise plus qu'une seul table que j'ai nommé HD pour stocker les informations relative aux caméras, en plus je n'avais pas grand-chose à modifier dans mon code !!!

    Pouvez-vous s'il vous plait me montrer un exemple de mise en oeuvre de la fonction case avec la boucle for pour plusieurs cameras dans le même script.

    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    succintement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    action=$1
    shift
    case $action in
    start) for cam do : traitement pour chaque caméra; done ;;
    stop) ...;;
    esac
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  17. #17
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut
    Merci pour l’exemple ce n’est pas facile !! Il faudra que je prenne le temps de comprendre

    Par contre j’ai encore un problème avec le status , les variables $ip, $usr, $passwd ne fonctionnent pas


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    status)
    	# status motion foscam
     
    read ip usr passwd <<EOF
    $(mysql -u"root" -p"PASSWORD" --skip-column-names -e"connect cam; SELECT ip,utilisateur,motdepasse FROM HD WHERE id = 1")
    EOF
     
    	status=$(curl -s 'http://$ip/cgi-bin/CGIProxy.fcgi?usr=$usr&pwd=$passwd&cmd=getDevState&1428549289736' | sed -e '/motionDetectAlarm/!d;s/ *<.\?motionDetectAlarm>//g')
    	if [ "${status}" = "0" ]; then
       		echo "Off"
    	else
       		echo "On"
    	fi
    Merci pour votre patience !!

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    «ça marche pô»
    on est bien avancés avec tant de précision.

    ça ne fonctionne pas comment :
    • la requête sql fonctionne ?
    • curl fonctionne ?
    • la commande sed fonctionne ?
    • le test sur $status fonctionne ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  19. #19
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut
    Excusez-moi pour mon manque de précision.

    La commande fonctionnait très bien avec les identifiants en clair par contre dès que je place une variable il n'y a plus de communication avec la cam

    Autrement je n’ai pas de problème de variables avec start & stop

    Je soupçonne le $ qui est devant curl de perturber les variables

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 672
    Par défaut
    quotes simples = pas de développement des variables.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/04/2007, 12h01
  2. Réponses: 5
    Dernier message: 05/10/2006, 10h18
  3. Réponses: 2
    Dernier message: 08/06/2006, 17h42
  4. Réponses: 1
    Dernier message: 23/10/2005, 00h55
  5. Réponses: 8
    Dernier message: 23/03/2005, 19h28

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