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 :

[expect] Boucler autant de fois qu'une valeur récupérée


Sujet :

Shell et commandes GNU

  1. #21
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 179
    Points : 107
    Points
    107
    Par défaut
    ah oui, en effet.

    Cependant, sur cisco, les ingénieurs qui ont dev le CLI ont permis l'exe de script quand tu es dessus, c'est pour ça, et tu dois taper "tclsh" (de mémoire) quand t'es sur du cisco, ce qui n'est pas le cas du HP.

    Bon maintenant, faut que je comprenne la boucle à la con que tu m'as montré pour arriver au résultat que je souhaite

  2. #22
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 179
    Points : 107
    Points
    107
    Par défaut
    ok, donc je suis complétement con c'est officiel

    j'ai mis "send" à la place de puts et niquel, ça s'affiche trop vite pour le coup

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for {set i 2} {$i<[llength $expect_out(0,string)]} {incr i;incr i} { send "dir slot[lindex $expect_out(0,string) $i]#flash:/ \n" }

    donc comment je rajoute un sleep là dedans ? car je pense que je peux pas rajouter autant de paramètres comme je veux là dedans

    il faudrait que j'arrive à : afficher que les slot à partir du n° 2 et savoir comment je peux rajouter des commandes dans la même boucle

  3. #23
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Si, dans le bloc du corps de la boucle for, tu peux mettre autant de commandes que tu veux, mais je ne pense pas que le sleep soit la meilleure solution.

    En restant général:

    -Quand tu fais du expect, tu fais du tcl qui tourne autour de 3 commandes:

    1) spawn: qui permet d'initier le process avec lequel tu vas interagir (dans ton cas, c'est ssh ....)
    2) send: elle permet d'envoyer des données au process initié précédemment (elle t'émule en train de taper au clavier)
    3) expect: elle permet de récupérer ce que le process te renvoie en retour sur l'écran (via des regex,elle t'émule en train de chercher une certaine zone de texte sur l'écran)

    Donc, dans un premier temps, oublions un peu expect, et depuis un terminal de ton linux (celui où tu lances ton script expect),
    passe tes commandes ssh,dis| inc,... et pour chacune, essaye de déterminer la regex la plus simple possible qui te permettra de récupérer la zone texte qui t'intéresse pour pouvoir passer à la commande suivante.
    C'est une fois que tu auras ça, que tu pourras passer à l'étape expect.

    PS: Sinon, tu peux éventuellement voir du coté de l'outils autoexpect qui va créer interactivement un script expect pour toi, mais faudra que tu le retouches pour le rendre plus général.
    Cordialement.

  4. #24
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 179
    Points : 107
    Points
    107
    Par défaut
    comment je rajoute des commandes dans la boucle for, dans le même corps { send "xxx" } ou en rajoutant des blocs les uns derrières les autres ?

  5. #25
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par tetzispa Voir le message
    comment je rajoute des commandes dans la boucle for, dans le même corps { send "xxx" } ou en rajoutant des blocs les uns derrières les autres ?
    Sans rien comprendre au problème, a priori, d'après la réponse de disedorgue, je dirais bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for {set i 2} {$i<[llength $expect_out(0,string)]} {incr i;incr i} {
       send "dir slot[lindex $expect_out(0,string) $i]#flash:/ \n"
      sleep 1
    }
    J'ai tout faux?

  6. #26
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 179
    Points : 107
    Points
    107
    Par défaut
    malheureusement oui, t'as tout faux pour le coup haha !

    le sleep 1 se met après les { } dedans la boucle ne comprend pas

    mais ma question portait sur le fait de rajouter un autre envoi de commande au switch comme le "send"

  7. #27
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Pour bien commencer la journée, c'est important de mettre un sleep. Surtout avant une accolade.

    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  8. #28
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Sans rien comprendre au problème, a priori, d'après la réponse de disedorgue, je dirais bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for {set i 2} {$i<[llength $expect_out(0,string)]} {incr i;incr i} {
       send "dir slot[lindex $expect_out(0,string) $i]#flash:/ \n"
      sleep 1
    }
    J'ai tout faux?
    Non, c'est bien ça, après expect est capricieux sur la synchro coté flux de données, et donc ça peut ne pas fonctionner correctement, mais ça n'a rien voir avec l’interprétation du code.

    Et les sleep n'arrange pas les choses...

    Il vaut mieux préférer les regex et peut-être aussi faire des send avec l'option -h en ayant au préalable défini la variable send_human en début de script, comme ça expect fera le send à une vitesse disons humaine (exemple de définition pris dans le man de expect: set send_human {.1 .3 1 .05 2} ).
    Cordialement.

  9. #29
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 179
    Points : 107
    Points
    107
    Par défaut
    ceci dit, l'affichage m'importe peu (la vitesse je parle) car c'est un test pour voir que ça boucle bien sur les différents slots

    j'en reviens à ma question d'origine :

    je rajoute un bloc de commande à quel niveau ? et faire en sorte que ma commande ne boucle qu'au 2ème slot !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for {set i 2} {$i<[llength $expect_out(0,string)]} {incr i;incr i} {
       send "dir slot[lindex $expect_out(0,string) $i]#flash:/ \n" { autre bloc de commande } { etc }
      sleep 1
    }

Discussions similaires

  1. copier coller une ligne plusieurs fois selon une valeur de cellule
    Par ghaza dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 05/04/2017, 09h48
  2. Réponses: 3
    Dernier message: 07/10/2016, 14h18
  3. Réponses: 7
    Dernier message: 28/01/2010, 14h44
  4. Réponses: 10
    Dernier message: 20/04/2007, 11h41
  5. [XSL]appliquer la fonction substring sur une valeur récupéré
    Par totoranky dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 22/02/2006, 17h21

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