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 :

bash et expect


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 135
    Par défaut bash et expect
    Bonjour tout le monde,

    Je souhaite créer un script permettant de vérifier le bon retour d'une commande.

    Pour résumer, je me connecter à un équipement, je lance une commande et je vois si je match une expression.
    Sauf que je n'arrive pas à cibler le résultat de ma commande...

    Voici pour ce qui est 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
    #!/bin/sh
     
    password=''
     
    for routeur in $(cat /tmp/partition_backup.list);
    do
    expect << EOF
                                    spawn -noecho ssh -q -o StrictHostKeyChecking=no test@$routeur
                                    expect "test@$routeur's password"
                                    send "$password\r"
                                    expect test@$routeur
                                    set output $expect_out(buffer)
                                    send "show chassis alarms | match backup\r"
                                    puts "---DEBUT $output ---FIN"
                                    expect admin@$routeur
    EOF
    done
    Voici le résultat que j'obtiens avec ce script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    test@routeur's password:
    {master:1}
    test@routeur> ---DEBUT  ---FIN
    show chassis alarms | match backup
    2017-01-11 03:42:15 CET  Minor  Host 1 Boot from backup root
    Alors que j'aimerais simplement cibler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2017-01-11 03:42:15 CET  Minor  Host 1 Boot from backup root

    Savez-vous comment je peux faire ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 135
    Par défaut
    Je pense avoir trouvé une piste mais je bloque pour le moment :

    Voici ce que j'ai rajouté à mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     expect << EOF
                                    spawn -noecho ssh -q -o StrictHostKeyChecking=no test@$routeur
                                    expect "test@$routeur's password"
                                    send "$password\r"
                                    expect test@$routeur
                                    send "show chassis alarms | match backup\r"
                                    puts $expect_out(buffer)
                                    expect test@$routeur
                                    parray expect_out
    EOF
    Et voici le retour du script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    test@test's password:
    test@test> (buffer)
    show chassis alarms | match backup
    2017-01-11 03:42:15 CET  Minor  Host 1 Boot from backup root
     
    test@test> expect_out(0,string) = test@test's password
    expect_out(buffer)   = test@test's password
    expect_out(spawn_id) = exp4
    J'obtiens bien quelque chose dans mon buffer mais ce n'est toujours pas ce que je veux :/

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    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 102
    Par défaut
    Citation Envoyé par musha76 Voir le message
    Alors que j'aimerais simplement cibler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2017-01-11 03:42:15 CET  Minor  Host 1 Boot from backup root
    Qu'est-ce que tu entends par "cibler"?
    Tu veux dire "filtrer" (au sens de "grep")?

    Si tu peux nous décrire ce que tu voudrais voir, il suffit de "piper" la sortie de ton script avec un "grep", par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monscript | grep 'backup'
    D'un autre côté, si tu peux nous décrire ce que tu voudrais pas voir, il suffit de "piper" la sortie de ton script avec un "grep -v", par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monscript | grep -v 'test@routeur'

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 135
    Par défaut
    En fait, j'aimerais pouvoir faire correspondre le $routeur à la sortie de la commande "show chassis alarms | match backup"

    Dès que j'obtiens "2017-01-11 03:42:15 CET Minor Host 1 Boot from backup root", j'aimerais pouvoir mettre dans un autre fichier :
    $routeur : Boot from backup root

    et si je ne détecte pas le message "2017-01-11 03:42:15 CET Minor Host 1 Boot from backup root" mettre $routeur : OK

    Je sais pas si c'est un peu plus clair pour vous

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    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 102
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if monscript | grep -q "2017-01-11 03:42:15 CET  Minor  Host 1 Boot from backup root"
    then echo "$routeur : Boot from backup root"
    else echo "$routeur : OK"
    fi > un_autre_fichier

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 135
    Par défaut
    Oui je comprends parfaitement la syntaxe. Mais je ne sais pas comment, ni ou mettre la boucle dans mon script, sachant que le $routeur dépend de mon expect

    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
    #!/bin/sh
     
    password=''
     
    for routeur in $(cat /tmp/partition_backup.list);
    do
    expect << EOF
                                    spawn -noecho ssh -q -o StrictHostKeyChecking=no test@$routeur
                                    expect "test@$routeur's password"
                                    send "$password\r"
                                    expect test@$routeur
                                    set output $expect_out(buffer)
                                    send "show chassis alarms | match backup\r"
                                    puts "---DEBUT $output ---FIN"
                                    expect admin@$routeur
    EOF
    done

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    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 102
    Par défaut
    Je pense qu'on peut faire quelque chose comme ça:
    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
    #!/bin/sh
     
    password=''
     
    for routeur in $(cat /tmp/partition_backup.list);
    do expect | grep -q "2017-01-11 03:42:15 CET  Minor  Host 1 Boot from backup root"; then echo "$routeur : Boot from backup root"; else echo "$routeur : OK"; fi > un_autre_fichier << EOF
                                    spawn -noecho ssh -q -o StrictHostKeyChecking=no test@$routeur
                                    expect "test@$routeur's password"
                                    send "$password\r"
                                    expect test@$routeur
                                    set output $expect_out(buffer)
                                    send "show chassis alarms | match backup\r"
                                    puts "---DEBUT $output ---FIN"
                                    expect admin@$routeur
    EOF
    done
    Si ça ne marche pas, tu peux aussi faire une fonction prenant $routeur comme argument.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Expect et bash
    Par musha76 dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 06/10/2017, 14h01
  2. Connexion à un serveur mysql via un script bash zenity avec expect
    Par xunil2003 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 24/02/2014, 07h31
  3. se connecter à mysql avec expect send bash
    Par paissad dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 13/11/2010, 03h00
  4. Expect et bash : rapatriement de données par ssh
    Par Bénarès77 dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 02/07/2010, 17h52
  5. [Plugin]package does not match the expected package src
    Par Fladnag dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 10/03/2004, 20h17

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