shell编程expect免交互
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,今天小编就为大家带来shell编程中expect免交互的文章。小编觉得挺不错的,为此分享给大家做个参考。一起跟随小编过来看看吧。一 : expect 概述1.1 expectexpect是建立在tcl
千家信息网最后更新 2026年11月01日shell编程expect免交互
今天小编就为大家带来shell编程中expect免交互的文章。小编觉得挺不错的,为此分享给大家做个参考。一起跟随小编过来看看吧。
一 : expect 概述
1.1 expect
- expect是建立在tcl基础上的一个工具,expect是用来进行自动化控制和测试的工具。主要解决shell脚本中不可交互的问题。对于大规模的linux运维很有帮助
- 在linux运维和开发中,我们经常需要远程登陆服务器进行操作,登陆的过程是一个交互的过程,可能会需要输入yes/no、password等信息。为了模拟这种输入,可以使用expect脚本
二 : expect 安装
2.1 挂载光盘
2.2 制作本地yum仓库
2.3 执行安装命令
- yum install expect -y
- 系统在默认情况下是没有安装expect软件,需要手动安装
三 : expect基本命令
3.1 spawn : 启动进程,并跟踪后续交互信息
3.2 expect
- expect的一个内部命令,判断上次输出结果里是否包含指定的字符串,如果有则立即返回,否则就等待超过时间后返回。
- 只能捕捉由spawn启动的进程的输出
3.3 send :向进程发送字符串,用于模拟用户的输入
- 该命令不能自动回车换行,一般要加\r(回车)
3.4 interact : 执行完成后保持交互状态,把控制权交给控制台
3.5 Timeout :指定超时时间,过期则继续执行后续指令
- 单位是:秒
- timeout -1 为永不超时
- 默认情况下,timeout是10s
3.6 exp_continue
- 允许expect继续向下执行指令
3.7 send_user
- 回显命令,相当于echo
备注:
- 永不超时常用于网络不稳定时使用
- shell脚本中的continue 指结束这次循环,开始下一次循环
- expect脚本中exp_continue指不会结束,继续匹配下一行
3.8 $argv 参数数组
- expect 脚本可以接受从bash传递的参数,可以使用[lindex $argv n]格式,去进行获得,n从0开始,分别表示第一个,第二个,第三个……参数
- v 代表value 值,前面是固定格式
- agv 与n 中间要有空格
3.9 expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就足够了
- expect eof 是在等待结束标志。由spawn启动的命令在结束时会产生一个eof标记,expect eof即在等待这个标记
- 看到eof 即代表结束脚本
四 : expect 语法

expect "要捕捉的内容" {send "要输入的参数\r";}
\r 回车符
- 没有带有exp_continue ,则匹配一次就推出,有的话就再往下执行匹配一次
- -re 参数表示匹配正则表达式
五 : experct 执行方式
5.1 直接执行
[root@localhost ~]# vim a.sh#!usr/bin/ecpect //expect二进制文件的路径,#设置环境#超时时间set timeout 9 //设置超时时间log_file test.log //日志文件路径log_user 1 //用户数量为1#定义变量set hostname [lindex $argv 0 ]set password [lindex $argv 1 ]#开启追踪spawnspawn ssh root@$hostname //spawn 启动命令#匹配条件,捕捉expect { //按条件捕捉去send执行 "(yes/no)" {send "yes\r";exp_continue} "*passwor" {send "$password\r"}}#权限转交控制台interact[root@localhost ~]# chmod +x a.sh [root@localhost ~]# ./a.sh $argv0 $argv1interact不要写在大括号里面
[gsy@localhost root]$ which expect/usr/bin/expect两个log可加可不加
set两个变量代表着传参
然后以spawn 去开启服务
exprct 去捕捉条件,中间send输出指令,\r回车,exp_continue继续匹配
- interact结束
5.2 嵌入执行
[root@localhost ~]# vim b.sh #!/bin/bash hostname=$1 password=$2 /usr/bin/expect<<-EOF //expect开始EOF标志 spawn ssh root@$hostname expect { "(yes/no)" {send "yes\r";exp_continue} "*password" {send "$password\r"} } expect "*]#" //检索是否以root登陆 send "exit\r" expect eofEOF //exprct结束标志,这个EOF不能有空格[root@localhost ~]# source b.sh java的全局变量指的是类文件为区域
shell的是所有bash环境都能识别
/usr/bin/expect<<-EOF 也可以视为声明expect 位置
- EOF前后不能有空格
spawn :以spawn模式执行操作,expect 才可以捕捉到
六 : expect 案例
6.1 创建用户tom,密码123123
- 正常情况下的交互过程
- 编写shell脚本(嵌入方式)
[root@localhost ~]# vim b.sh #!/bin/bashuser=$1mima=$2/usr/bin/expect<<-EOFspawn useradd $userspawn passwd $userexpect { "New password" {send "$mima\r";exp_continue} "new password" {send "$mima\r"}}expect eofEOF[root@localhost ~]# chmod +x b.sh [root@localhost ~]# ./b.sh qqq 965483spawn useradd qqqspawn passwd qqqChanging password for user qqq.New password: BAD PASSWORD: The password is shorter than 8 charactersRetype new password: passwd: all authentication tokens updated successfully.[root@localhost ~]# vim b.sh[root@localhost ~]# id qqquid=1001(qqq) gid=1001(qqq) groups=1001(qqq)
6.2 ssh登录
- 首次登录
正常登录
- 连接被拒绝,可能是ssh没开,或者端口不对,或者防火墙限制
- 没有连接地址
- 利用expect完成ssh登录过程
6.3 利用expect完成ftp登录过程
想要注释多行语句 可以在首部输入 :<
以上就是shell编程expect免交互的方法介绍,详细使用情况还得要大家自己使用过才能知道具体要领。如果想了解更多相关内容,欢迎关注行业资讯频道!
脚本
命令
输入
参数
过程
情况
时间
控制
登录
代表
变量
指令
文件
条件
标志
用户
进程
登陆
输出
编程
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
南京欣网互联网络科技
百单网互联网科技有限公司怎么样
为想互联网科技怎么样
科技平台互联网
厦门中拓互联网络科技有限公司
互联网金融监管科技
江苏南京365互联网科技
重庆威客帮互联网科技
来此购互联网科技有限公司
赶超互联网科技 微信多开
宜昌元轩互联网科技有限公司
美国互联网科技实力
富国互联网金融科技混合基金
卡尔迅互联网科技有限公司
上海同邻互联网科技有限公司规模
福建互联网展示科技馆设计
版纳互联网科技选哪家
互联网金融运营模式中的金融科技
广西泛欧互联网科技有限公司
重庆科技产业互联网有哪些
广州淘业互联网络科技
狮子座互联网科技有限公司
互联网 视角下的科技创新
天扬科技互联网广告
互联网科技股午盘股票涨跌
广州千川互联网科技有限公司
美国互联网科技公司
上海创道互联网络科技有限公司
宇信科技在杭州互联网排第几
米泉互联网科技专业怎么样