Explication détaillée de Linux attendue

藏色散人
Libérer: 2019-08-09 14:22:54
avant
9399 Les gens l'ont consulté

Explication détaillée de Linux attendue

Expect peut être vu partout

La première fois que j'ai vu la commande expect, c'était la première fois que je participais à À l'époque, il s'agissait d'un ensemble d'outils en ligne à grande échelle pour le déploiement automatique, la comparaison MD5 et la publication, écrits par une personne talentueuse de l'entreprise utilisant des scripts Shell. Quand j'étais libre, j'en ai regardé quelques-uns. les scripts et beaucoup de commandes attendues. Je ne comprenais vraiment pas l'utilisation de la commande Expect, j'ai donc trouvé le temps de résumer cet article sur la commande Expect.

Recommandé : [Tutoriel vidéo Linux]

Posez d'abord une question

Il y a maintenant deux hôtes Linux A et B , comment passer de l'hôte A à l'hôte B, puis exécuter des commandes sur l'hôte B. Comment automatiser entièrement ce processus ? Vous pouvez utiliser cette méthode :

ssh admin@10.220.20.15 "ls"
Copier après la connexion

Mais cette méthode est maladroite. Vous devez saisir le mot de passe à chaque fois et vous ne pouvez pas exécuter une logique ou des commandes complexes. Alors, comment réaliser une automatisation complète ? Cela utilisera les attentes résumées dans l’article d’aujourd’hui.

À quoi s’attendre ?

expect est un outil de programmation gratuit utilisé pour automatiser des tâches interactives sans intervention humaine. Pour parler franchement, Expect est un ensemble de logiciels utilisés pour implémenter des fonctions d'interaction automatique.

Dans le travail réel, lorsque nous exécutons des commandes, des scripts ou des programmes, ces commandes, scripts ou programmes doivent saisir certaines instructions pour continuer à s'exécuter à partir du terminal, et ces saisies doivent être effectuées manuellement. Avec Expect, vous pouvez simuler l'entrée standard fournie au programme en fonction des invites du programme, réalisant ainsi une exécution interactive automatisée. C'est ce qui est attendu ! ! !

Bases de Expect

Lorsque vous utilisez Expect, vous utilisez essentiellement les quatre commandes suivantes :

Explication détaillée de Linux attendue

<🎜 Le > La commande send reçoit un paramètre de chaîne et envoie le paramètre au processus.

La commande expect est opposée à la commande send. La commande expect est généralement utilisée pour attendre les commentaires d'un processus. Nous envoyons ensuite la commande interactive correspondante en fonction des commentaires du processus.

La commande spawn est utilisée pour démarrer un nouveau processus. Les commandes send et expect après spawn interagissent toutes deux avec le processus ouvert à l'aide de spawn.

La commande Interactive n'est en fait pas très utilisée. Généralement, nous pouvons utiliser les commandes spawn, send et Expect pour terminer nos tâches, mais dans certaines occasions spéciales, nous devons toujours utiliser la commande Interactive. La commande est principalement utilisée pour quitter l'automatisation et entrer dans l'interaction manuelle. Par exemple, nous utilisons les commandes spawn, send et expect pour terminer la connexion FTP et effectuer la tâche de téléchargement des fichiers. Cependant, nous espérons qu'une fois le téléchargement du fichier terminé, nous pourrons toujours rester dans l'état de la ligne de commande FTP afin que. nous pouvons exécuter manuellement les commandes suivantes. À ce stade, utilisez la commande d'interaction. Cette tâche peut être très bien accomplie.

Analyse pratique du code

Attend est résumé ci-dessus, en particulier certaines commandes couramment utilisées sont expliquées en détail. Ce qui suit est une explication détaillée de la façon d'utiliser Expect pour effectuer certaines tâches quotidiennes via certains scripts Expect couramment utilisés.

#!/usr/tcl/bin/expect
set timeout 30
set host "101.200.241.109"
set username "root"
set password "123456"
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
interact
Copier après la connexion

Il s'agit d'un exemple de code d'attente très simple qui démontre l'utilisation de base d'expect.

#!/usr/tcl/bin/expect : utilisez Expect pour interpréter le script ;

set timeout 30 : définissez le délai d'attente en secondes, la valeur par défaut est de 10 secondes ; 🎜>set host "101.200.241.109" : Définir les variables ;

spawn ssh $username@$host : spawn est une commande interne d'expect qui peut être exécutée après être entré dans l'environnement attendu si expect n'est pas installé ou. directement La commande spawn est introuvable lorsqu'elle est exécutée sous le SHELL par défaut. Sa fonction principale est d'ajouter un shell au processus en cours d'exécution ssh pour fournir des instructions interactives ;

expect "*password*" : expect est également une commande interne de expect. Cette commande permet de déterminer la dernière fois si. le résultat de sortie contient la chaîne "mot de passe", si c'est le cas, retournez immédiatement ; sinon, attendez un certain temps et revenez, le temps d'attente ici est de 30 secondes défini précédemment

envoyer "$passwordr" : lors de la correspondance Lorsque le résultat de sortie correspondant est atteint, le mot de passe est envoyé au processus ssh ouvert et l'action interactive est effectuée

interagir : une fois l'exécution terminée, l'état interactif est maintenu et le contrôle est transféré ; à la console À ce moment, 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.

Il s'agit de l'analyse du script simple ci-dessus. Dans l'exemple ci-dessus, cela implique un concept très important dans expect - mode-action ; c'est-à-dire l'expect "*password*" {send " $passwordr ci-dessus. "}Le sens exprimé par ce code.

Mode-Action

Parlons du « Mode-Action » basé sur le code expect "*password*" {send "$passwordr"}. Pour faire simple, si un modèle correspond, l'action correspondante sera effectuée ; si la chaîne du mot de passe correspond, le mot de passe sera saisi. Vous pouvez également voir un code comme celui-ci :

expect {
    "password" {
        send "$password\r"
        exp_continue
    }
    eof
    {
        send "eof"
    }
}
Copier après la connexion

其中exp_continue表示循环式匹配,通常匹配之后都会退出语句,但如果有exp_continue则可以不断循环匹配,输入多条命令,简化写法。

传参

很多时候,我们需要传递参数到脚本中,现在通过下面这段代码来看看如何在expect中使用参数:

#!/usr/tcl/bin/expect
if {$argc < 3} {
    puts "Usage:cmd <host> <username> <password>"
    exit 1
}
set timeout -1
set host [lindex $argv 0] 
set username [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
interact
Copier après la connexion

在expect中,\$argc表示参数个数,而参数值存放在$argv中,比如取第一个参数就是[lindex $argv 0],以此类推。

总结

能够在工作中熟练的使用Shell脚本就可以很大程度的提高工作效率,如果再搭配上expect,那么很多工作都可以自动化进行,对工作的展开如虎添翼。如果你会Python的话,你的视野将会更加开阔,那个时候你又会“嫌弃”expect了。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:jellythink.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!