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 :

Intégrer commande Expect dans une boucle Shell Bourne


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 46
    Par défaut Intégrer commande Expect dans une boucle Shell Bourne
    Bonjour,

    Je suis "bloqué" avec du sh, mon objectif étant de faire plusieurs Backup à partir d'un Script Bourne shell. Avec la commande send "wr"

    Plusieurs, Switch = Boucle = While / Do

    Connexion des équipements -> send 'wr'

    Voici mon code :

    PS: si vous avez des solutions basic merci d'avance,

    Cordialement,

    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
    #!/bin/sh
     
    password=@xxxxxxxx
     
    expect << EOF
      
                                    spawn -noecho ssh -q -o StrictHostKeyChecking=no admin@10.XX.XXX.XXXX
                                    expect "Password:"
                                    send "$password\r"
                                    expect "#"
                                    send "wr\r"
                                    expect "#"
                                    send "exit"
    EOF
     
    while command-list1
    do command-list2
    done
    Jusque là, j'arrive à faire un wr sur un commutateur
    Mon objectif est de faire la même mais sur plusieurs commutateurs = Une boucle quoi
    Si vous avez des idées pour la boucle je suis très nul en boucle..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while command-list1
    do command-list2
    done
    ___

    Voici ma commande qui me permet de retrouvé toute les IP des différents commutateurs pour faire leurs sauvegarde.
    Je pense que je dois l'intégré dans ma boucle j'imagine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    send "cat /etc/hosts | egrep 'SWci8XX|xxxx|xxx|xxxxx|xxxxx|xxxxxx | ask {print^1}"
    }


    Cdt,

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 358
    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 358
    Par défaut
    Bonjour,
    Citation Envoyé par WorldMonde Voir le message
    send "cat /etc/hosts | egrep 'SWci8XX|xxxx|xxx|xxxxx|xxxxx|xxxxxx | ask {print^1}"
    }
    Explique cette commande, car elle ne veut rien dire étant donné le nombre d'erreur qu'il y a dedans...

    De plus, je ne pense pas que passer par expect soit la meilleure solution étant donné que derrière il y a du ssh: dans ce cas on utilise des clés afin de ne pas exposer des mots de passe dans des scripts.

    Et sinon, dans ton cas, tu sembles vouloir faire une boucle sur une liste, donc for est plus adapté que while.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 46
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat /etc/hosts | grep sw76|sw67|swtic37|switch48|switch18|switch| ask {print^1}
    Alors je m'explique il y a dans un fichier hosts, une liste de commutateurs avec leurs IP,
    Cette commande me permet de regardé cette liste par commutateur - > exemple : sw76,... et avec un ask {print^1} de récupéré seulement l'ip qui correspond au switch. Avec cette
    commande j'essaie de faire un backup depuis l'ip que j'ai récupéré dans le fichier hosts.

    Quand je le fais avec un commutateur j'arrive très bien, je suis venus voir pour moi m'aidé à faire une boucle sur différents commutateurs. Car si j'arrive à en faire 2 je pourrais en faire sur plusieurs

    Oui pourquoi pas un For c'est plus adapté bien sûr.

    C'est un peu flou je comprends si tu as des solutions pour le faire sur plusieurs commutateur avec un for je suis preneur ^^'

  4. #4
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Si j'ai bien compris, ça devrait être un peu mieux comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/sw76|sw67|swtic37|switch48|switch18|switch/{print $1}' /etc/hosts | while read ip; do commande-backup "$ip"; done
    Après il reste à savoir ce qu'est commande-backup.

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 46
    Par défaut
    J'ai peut-être pas compris et tu veux implémenté ça ? dans mon code ?
    Mais je ne sais pas si cela va marché en vrai ou c'est juste un 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
    #!/bin/sh
     
    password=@xxxxxxxx
     
    expect << EOF
      
                                    spawn -noecho ssh -q -o StrictHostKeyChecking=no admin@10.XX.XXX.XXXX
                                    expect "Password:"
                                    send "$password\r"
                                    expect "#"
                                    send "wr\r"
                                    expect "#"
                                    send "exit"
    EOF
     
    awk '/sw76|sw67|swtic37|switch48|switch18|switch/{print $1}' /etc/hosts | while read ip; do commande-backup "$ip"; 
    done
    Je ne suis pas sûr que cela va marché ^^'
    Je vais testé lundi je n'es pas de commutateur chez moi.
    Ou j'ai peut-être mal compris.

  6. #6
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Eh bien si je recopie bêtement ce qu'il y a au-dessus pour commande-backup, ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    commande-backup() {
    expect << EOF
      
                                    spawn -noecho ssh -q -o StrictHostKeyChecking=no admin@$1
                                    expect "Password:"
                                    send "$password\r"
                                    expect "#"
                                    send "wr\r"
                                    expect "#"
                                    send "exit"
    EOF
    }
     
    awk '/sw76|sw67|swtic37|switch48|switch18|switch/{print $1}' /etc/hosts | while read ip; do commande-backup "$ip"; done
    Mais attention à ce qu'a dit disedorgue plus haut au sujet du mot de passe.

Discussions similaires

  1. [shell/expect] boucle dans une boucle
    Par tetzispa dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 22/08/2018, 09h25
  2. [Batch] Pb avec la commande "Findstr" dans une boucle "For"
    Par Salent dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 10/12/2012, 13h57
  3. Problème dans une boucle shell
    Par Maillon dans le forum Linux
    Réponses: 6
    Dernier message: 21/07/2009, 08h45
  4. Réponses: 4
    Dernier message: 26/12/2007, 10h39
  5. Commande rsh dans une boucle while
    Par legapounet dans le forum Linux
    Réponses: 1
    Dernier message: 09/03/2006, 14h58

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