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 :

Script bash qui me permet de trier des données et de l'envoyer par mail


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2013
    Messages
    51
    Détails du profil
    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2013
    Messages : 51
    Par défaut Script bash qui me permet de trier des données et de l'envoyer par mail
    Bonjour, je suis débutant en script et je suis sur un projet personnel
    Je veux faire ça sur un script bash qui fait les actions suivants:
    1/ Se connecter au site www.monsite.fr avec le compte user@monsite.fr et le mot de passe "passer".
    2/ En gardant les cookies précédemment créés, effectuer une recherche sur la page boutique et afficher le nombre de produits disponibles dans la page qui ont un tarif supérieur ou égal à 1000€.
    3/ Envoyer ce nombre (le nomre trouvé) par mail à l'adresse adresse@monsite.fr
    4/ Gérer les erreurs [log](par exemple si le site ne fonctionne pas) et envoyer un mail avec l'erreur dans ce cas à l'adresse adresse@monsite.fr

    Ce que j'ai fait:

    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
     
    #!/bin/bash 
    echo "ce script 
     
     #site= monsite.fr
     #login=test@monsite.fr
     #password=passer
     
     
     
     
    wget -c "http://www.monsite.fr/SuiteLienIdentification" --post-data="PersistentCookie=1&LOGIN=test@monsite.fr&PASSWORD=passer" --no-check-certificate --save-cookies="/tmp/cookies" --keep-session-cookies
     
     #etape_pour_telecharger_une_pageAlpha qui contient 
     wget -c "http://test@monsite.fr/pageAlpha.html" --no-check-certificate --load-cookies="/tmp/Tcookie"
     
    product="http://test@monsite.fr/pageAlpha.html"
    if product >= 1000
    	then echo product="produit superieur ou egal à 1000"
    	else echo "produit inferieur à 1000 euros"
    fi
    #lister les logs
    ll /tmp/*.log |while read ErreurSite
    do
    mail -s "erreur" test@monsite.fr < $ErreurSite
    done
     sleep 2 
    exit 0
    Je sais que ça porte des erreurs mais j'aimerais juste avoir votre avis et des pistes pour l'améliorer sur pour le tri et l'envoie de mail.
    Cordialement

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

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

    n'as-tu pas une machine capable d'exécuter ton script ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    product="http://test@monsite.fr/pageAlpha.html"
    if product >= 1000
    comme tu peux le voir, product ne contient pas un nombre, mais l'adresse de la pageAlpha,
    et, la syntaxe correcte pour la commande if, c'est if <commande>; then..., or, la simple expression d'une comparaison ne constitue pas une commande shell de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ll /tmp/*.log |while read ErreurSite
    les alias d'un interpréteur interactif (le shell dans lequl tu exécutes le script) ne sont pas disponibles dans un interpréteur non-interactif (un script) (où par défaut, ils sont désactivés).
    et, pour lister les fichiers d'un répertoire, on utilise une boucle for avec le Développement des chemins (cf. man bash)

    je crois qu'il faut régler ces problèmes avant de tenter d'envoyer un mail.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2013
    Messages
    51
    Détails du profil
    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2013
    Messages : 51
    Par défaut
    Merci N Bah pour votre retour.
    Oui je ne suis pas trop en dev script.
    Je vois les erreurs que j'ai fait .
    Je vais les corriger et voir.
    Mais à part celà?
    Ma syntaxe pour l'envoie de mail elle est bonne?
    Pour récupérer st stocker les cookies?

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 851
    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 851
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Citation Envoyé par jaraf Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash 
    echo "ce script     # Déjà manque les guillemets fermants
     
    ...
    
     #etape_pour_telecharger_une_pageAlpha qui contient 
     wget -c "http://test@monsite.fr/pageAlpha.html" --no-check-certificate --load-cookies="/tmp/Tcookie"
    Si tu exécutes wget simplement, alors tu n'auras pas possibilité de récupérer quoi que ce soit. En shell, quand on veut récupérer le retour d'une commande (ou, pour être plus exact, ce qu'elle affiche), faut l'encapsuler par $(...) (ou bien par `...` qui est l'ancienne écriture) et bien entendu si on récupère quelque chose alors c'est pour s'en servir donc on met (au minimum) une variable pour ça
    pageAlpha=$(wget -c "http://test@monsite.fr/pageAlpha.html" --no-check-certificate --load-cookies="/tmp/Tcookie").
    pageAlpha=`wget -c "http://test@monsite.fr/pageAlpha.html" --no-check-certificate --load-cookies="/tmp/Tcookie"`.
    Ensuite à toi de traiter le contenu de "$pageAlpha"...


    Citation Envoyé par jaraf Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    product="http://test@monsite.fr/pageAlpha.html"
    if product >= 1000
    	then echo product="produit superieur ou egal à 1000"
    	else echo "produit inferieur à 1000 euros"
    fi
    Ici grosse lacune. Déjà une variable se précise en mettant un "$". De plus, si tu écris var="toto" ben il n'y a aucune raison pour que le shell comprenne que tu veux en fait exécuter la commande "toto" et enfin en shell, on ne peut pas évaluer directement une expression. Le "if" ne peut évaluer que des commandes. D'où la commande "test" qui est faite pour ça.
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    product=$(la commande qui va bien)
    if test $product -ge 1000; then 
        ...
    fi

    Ou bien (puisqu'une variable qui n'est utilisée qu'une seule fois ne sert à rien)...
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if test $(la commande qui va bien) -ge 1000; then 
        ...
    fi

    Citation Envoyé par jaraf Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #lister les logs
    ll /tmp/*.log |while read ErreurSite
    Pourquoi faire "ll" (équivalent de "ls -l") ? T'as vraiment besoin des infos du format long telles que les droits et la taille ?? Ou tu veux juste les noms de fichiers ??? Surtout que, comme l'a précisé N_Bah, si "ll" est un alias, alors ça ne fonctionnera même pas.
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ls /tmp/*.log |while read ErreurSite; do
      ...
    done
    Mais sinon autant éviter "ls" quand ce n'est pas indispensable...
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for ErreurSite in /tmp/*.log; do
      ...
    done
    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]

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/03/2012, 12h24
  2. programme en vba qui permet le transfert des données word vers excel
    Par progaide dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/06/2009, 17h28
  3. Réponses: 1
    Dernier message: 26/04/2008, 18h09
  4. [ Noob - Perl Reseau ] Script perl qui recupere les tables ARP des switches Cisco
    Par oneal42 dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 04/09/2007, 11h11
  5. Script bash qui ouvre une fenetre Firefox
    Par vica6a dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 14/01/2007, 18h00

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