shell中利用expect实现自动化输入

tech2025-05-17  10

expect概述

expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信 。使用场景 : 执行系统命令或程序时,有些系统会以交互式的形式要求输出指定的字符串之后才能执行命令,如用户设置密码 ,判断yes/no,ssh登录,免密等

基本命令介绍

spawn命令 作用 :执行一个命令或程序

语法 :spawn 选项 需要执行的命令或程序 选项 : -open: 表示启动文件进程 -ignore:表示忽略某些信号

expect命令 作用 :获取spawn执行命令或程序的结果 并对比与事先指定关键字是否的相匹配 若一样则执行后续动作

语法 : expect 表达式 [动作]

send命令 作用 :指定执行动作 (就是说expect对比成功后你先输入啥东西)

语法 :send "要执行的东西" 说明 :\r表示回车、\n表示换行、\t表示制表符等

exp_continue命令

作用是让expect程序继续匹配的意思

expect程序变量

普通变量

语法 set 变量名 变量值

特殊变量

语法 set a [lindex $argv 0] set b [lindex $argv 1]

expect中$argv表示参数数组,可以使用[lindex $argv n]接收expect脚本传参,n从0开始,分别表示第一个[lindex $argv 0]参数、第二个[lindex $argv 1]参数…

expect中的关键字

eof关键字 作用 :用于匹配结束符

timeout关键字 作用 :控制时间的关键字

案例 :ssh

#!/usr/bin/expect ​ spawn ssh root@192.168.1.50 "free -m" expect { "yes/no" {exp_send "yes\r";exp_continue} "*password" {exp_send "guoke123\r"} } expect eof

说明 :在shell脚本中直接使用expect可使用如下方式

passwd=`awk -F "host: " '/root@localhost/{print $2}' /root/dic` yum install expect -y expect << EOF cd /mysql_3306/ spawn bin/mysqladmin -uroot password 123456 -p expect { "Enter password:" { send "$passwd\r" }; } expect eof EOF

定义bash变量后在expect中调用 详细完整脚本可查看shell分类中的shell自动化安装mysql-glibc脚本

最新回复(0)