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"
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 :
<🎜 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
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" } }
其中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
在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!