shell编程expect免交互
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,今天小编就为大家带来shell编程中expect免交互的文章。小编觉得挺不错的,为此分享给大家做个参考。一起跟随小编过来看看吧。一 : expect 概述1.1 expectexpect是建立在tcl
千家信息网最后更新 2025年12月03日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安全错误
数据库的锁怎样保障安全
杭州市网络安全教育平台
北京自动化软件开发经历
关于网络安全资料100字
档案加工软件开发
如何增加数据库访问权限
数据库统计数据表中所有人数
上海天行网络技术有限公司
武大网络安全学院专业
关注身边的网络安全
长城汽车的软件开发岗怎么样
宣传网络安全知识文字
云服务器IP地址
扬讯软件开发有限公司招聘
软件开发团队效能度量
钢铁企业软件开发
春风十里交友软件开发
数据库可视化设计工具
泰安智能养老软件开发公司
优秀的软件开发公司有哪些特点
网络安全妈妈同行
网络技术出现于何时
软件开发过程说明文档
数据库安装总结报告
三大主流数据库
网络安全大会主持
用脚本创建数据库用户
海南师范大学网络安全调剂信息
公安信息网络安全遵循
数据库设计是数据库应用的核心吗
优秀的软件开发公司有哪些特点