Partage de technologie

Shell Attend une interaction automatisée (exemple)

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Shell Attendez-vous à une interaction automatisée

Lors de l'exploitation et de la maintenance quotidiennes de Linux, il est souvent nécessaire de se connecter au serveur à distance. Pendant le processus de connexion, un processus interactif est requis et des informations telles que oui/non peuvent devoir être saisies, donc expect est utilisé pour réaliser l'interaction. .

Syntaxe des clés

❶[#!/usr/bin/expect]

Cette ligne indique au système d'exploitation quel shell utiliser pour exécuter le code dans le script. Attendez-vous ici, c'est en fait la même chose que bash sous Linux et cmd sous Windows. REMARQUE : Cette ligne doit être la première ligne du script.

❷ensemble

Le délai d'attente par défaut est de 10 secondes. Le délai d'expiration de la session peut être défini via la commande set. Si le délai d'expiration n'est pas limité, il doit être défini sur -1.

Par exemple : set timeout 300 //Indique que le délai d'expiration de la session est de 300 s

Par exemple : définir le délai d'attente -1/réglage/jamais délai d'attente, paramètres communs

Remarque : Pourquoi devez-vous définir un délai d'expiration ? Le délai par défaut étant de 10 secondes, il est probable qu'il soit déconnecté pendant l'exécution interactive, ce qui entraînera la fin de l'exécution de la tâche avant la fin. Une tâche planifiée de notre entreprise qui synchronisait les fichiers à partir d'un FTP distant se terminait toujours. Plus tard, j'ai défini le délai d'attente sur -1 et tout s'est bien passé.

❸apparaître

spawn est généralement suivi d'une commande d'exécution Linux, ce qui signifie ouvrir une session, démarrer le processus et suivre les informations d'interaction ultérieures.

❹attendre

Seuls les résultats d'exécution des commandes exécutées par spawn sont capturés par expect, qui incluent principalement les informations d'invite de saisie standard, eof et timeout. Attendez que l'invite de commande apparaisse, qui est l'invite à capturer les entrées de l'utilisateur :

➎envoyer

L'envoi de valeurs qui nécessitent une interaction remplace la saisie manuelle de l'utilisateur ; cette commande ne peut pas entrer automatiquement ni passer à la ligne, et nécessite généralement l'ajout de r (retour chariot) ou de n.

expect "password"{ send "abc123r"} //La partie d'envoi de la même ligne doit avoir {}

❻Terminator attend eof/interact

s'attendre à eof

Ceci doit être ajouté, correspondant à spawn, cela signifie que les informations de sortie du terminal de capture sont terminées, similaire à if....endif.

interagir

Une fois l'exécution terminée, maintenez l'état interactif et transférez le contrôle à la console. À ce stade, une opération manuelle peut être effectuée. S'il n'y a pas de phrase de ce type, il se fermera une fois la connexion terminée, au lieu de rester sur le terminal distant.

PS : Le script expect doit se terminer par Interactive ou Expect eof. Expect eof est généralement suffisant pour effectuer des tâches automatisées.

Exemple

Insérez la commande expect dans le script shell, le format est le suivant

Exemple 1 : 22.sh script de création de dossier

#!/bin/sh

attendre

générer ssh 10.1.1.196

attendre le mot de passe {envoyer xxxn}

envoyer cd /home/cg/hmf_app/testr

envoyer mkdir newworkr

envoyer exitr

s'attendre à eof

EOF

Exemple 2 : Créer un script shell de dossier

attendre

générer ssh 10.1.1.196

attendre le mot de passe {envoyer xxxn}

envoyer cd /home/cg/hmf_app/testr

envoyer mkdir newworkr

envoyer exitr

s'attendre à eof

EOF

Exemple 3 : Copier des fichiers

attendre

définir le délai d'expiration -1

générer scp [email protected]:/data/package/casb/$casbzip ./

attendre le mot de passe {envoyer xxxn}

s'attendre à eof

EOF

Remarque:

EOF

...

EOF

Représente un script shell

faire référence à:Shell Expect script interaction_shell automatisé contenu d'entrée automatique interactif-CSDN Blog