Shell脚本之Expect免交互
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,Expext概述Expect是建立在tcl基础上的一个工具,Expect是用来自动化控制和测试的工具。主要解决shell脚本中不可交互的问题。有助于大规模的系统运维工作。在日常的运维与开发中,常常需要
千家信息网最后更新 2026年11月04日Shell脚本之Expect免交互
Expext概述
Expect是建立在tcl基础上的一个工具,Expect是用来自动化控制和测试的工具。主要解决shell脚本中不可交互的问题。有助于大规模的系统运维工作。在日常的运维与开发中,常常需要运城登录到服务器,然而登录的过程却是个需要交互的过程,可能会要输入yes/no等信息,使用Expect脚本即可实现免交互操作。
Expect安装
挂载光盘
制作本地YUM源
执行安装命令
yum install expect -y
基本命令
send
向进程发送字符串,用于模拟用户的输入,该命令不能自动回车换行,一般要加\r (回车)。
expect
expect的一个内部命令,判断上次输出结果里是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回。只能捕捉由spawn启动的进程的输出。
spawn
启动进程,并跟踪后续交互信息
interact
执行完成后保持交互状态,把控制权交给控制台
Timeout
指定超时时间,过期则继续执行后续指令
单位:秒
timeout -1 为永不超时
默认的timeout是10秒
exp_continue
允许expect继续向下执行指令
send_user
回显命令,相当于的echo输出
$arvg 参数数组
Expect脚本可以接受从bash传递的参数。可以使用[lindex $arvg n]获得,n从0开始,分别表示第一个,第二个,第三个为参数...参数
Expect脚本必须以interact或expect ecof结束,执行自动化任务通常expect eof就够了
expect eof实在等待结束标志。由spawn启动的命令在结束时会产生一个eof标记,expect eof即在等待这个标记
Expect语法
单分支语法
expect "passwd:" {send"mypasswd\r";}多分支语法
expect"aaa"{send"AAA\r"}expect"aaa"{send"AAA\r"}expect"aaa"{send"AAA\r"}//Send命令不具备回车换行功能,一般要加\或\nexpect{"aaa"{send"AAA\r"}"bbb"{send"BBB\r"}"ccc"{send"CCC\r"}}//只要匹配上了任何一个,执行项硬的send语句后退出该expect语句expect{"aaa"{send"AAA";exp_continue}"bbb"{send"BBB";exp_continue}"ccc"{send"CCC"}}//exp_continue表示继续后面的匹配,若匹配上了aaa,执行完send语句后还要继续往下匹配bbb-re 参数表示匹配正则表达式Expect执行方式
1.直接执行
案例演示:
SSH登录
首次登陆
正常登录
连接被拒绝,可能ssh没开,或端口号不对,亦或是防火墙限制
没有该连接地址
[root@localhost ~]# vim a.sh#!/usr/bin/expect //Expect二进制文件的路径#超时时间set timeout 20 //20秒等待时间log_file test.log //日志文件log_user 1 //日志用户#参数传入set hostname [lindex $argv 0] //追加参数0,统计变量并加载第1位置参数set password [lindex $argv 1] //追加参数1,统计变量并加载第2位置参数#追踪命令spawn ssh root@$hostname //追踪命令#捕捉信息并匹配免交互执行expect { //捕捉提示信息 "Connection refused" exit //捕捉到拒接连接信息即退出 "service not konwn" exit //捕捉到服务为开启信息即退出 "(yes/no)" // 捕捉yes或no参数 {send "yes\r";exp_continue} //输入yes并继续执行 "*password" // 捕捉参数 {send "$password\r"} //输入密码参数 }#控制权交予控制台interact //控制权转交控制台人为输入exit //退出脚本[root@localhost ~]# chmod +x a.sh //授予脚本执行权限[root@localhost ~]# ./a.sh 192.168.235.134 123123 //运行脚本远程连接spawn ssh root@192.168.235.134root@192.168.235.134's password: Last login: Thu Oct 10 15:13:27 2019 from 192.168.235.1 //已成功远程登录[root@localhost ~]# exit 登出Connection to 192.168.235.134 closed. //退出远程登录 2.嵌入执行
案例演示:
创建用户jarry,密码123123
[root@localhost ~]# vim c.sh#!/bin/bash user=$1password=$2#非交互命令放expect外面useradd $user#开始交互expect <<-EOF //Expect开始标志,标准性输入,等同于stdinspawn passwd $userexpect "新的*"send "$password\r"expect "重新*"send "$password\r"expect eof;EOF //Expect结束语句,EOF前后不能有空格[root@localhost ~]# chmod +x c.sh[root@localhost ~]# ./c.sh jarry 123123spawn passwd jarry更改用户 jarry 的密码 。新的 密码:无效的密码: 密码少于 8 个字符重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。
参数
命令
脚本
密码
控制
输入
信息
登录
时间
用户
语句
字符
控制台
控制权
语法
进程
输出
成功
位置
分支
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网金融科技
金融科技还是互联网
网络科技有限互联网
互联网公司 科技公司
互联网 卓越科技
壹账通互联网科技
互联网科技视频素材
华中科技有哪些互联网大佬
开启互联网科技时代小说
现代科技和互联网有关系吗
企晟互联网信息科技有限公司
山东有哪些互联网科技公司
互联网科技实习生岗位
产业互联网科技服务公司
吉林省码上互联网科技电话
互联网公司属于科技吗
云南互联网科技学费
求路客互联网科技电话
互联网科技博主张洲
互联网科技创新创业项目
互联网科技公司起名
互联网科技活动banner
互联网 科技
为想互联网科技
盛创互联网科技有限公司
常德市电业局互联网科技部
顶级互联网科技成果有哪些
互联网科技创新服务
富国互联网科技002692
云南互联网科技学费