expect用法介绍

85 篇文章 13 订阅
订阅专栏

一、概念

Expect是UNIX系统中用来实现自动化控制和测试的软件工具,作为Tcl脚本语言的一个扩展应用在交互式软件中,如Telnet、FTP、SSH等。

执行shell脚本,需要从终端得到输入时(如ssh root@192.168.1.2),Expect可以根据提示,模拟标准输入来实现交互脚本执行

可以把shell和expect理解为两种不同的脚本语言,expect有独自的语法、变量

二、ssh远程主机的方式

2.1.简单方式,直接使用expect命令

#!/bin/bash
#登陆远程主机并查看主机名

IP="192.168.1.2"
USERNAME="root"
PWD="123456"

expect << EOF
    set timeout 6
    spawn ssh ${USERNAME}@${IP} -o "StrictHostKeyChecking no"
    expect "password:"          {send "${PWD}\r"}
    expect "#"                  {send "hostname\r"}
    expect "#"                  {send "exit\r"}
EOF

脚本介绍:

expect << EOF
	.......
EOF					#表示里面的内容均由expect命令去执行
set timeout 6		#设置超时时间为6秒,下面的代码需在6秒钟内完成,如果超过,则退出。用来防止ssh远程主机网络不可达时卡住及在远程主机执行命令宕住
spawn				#激活一个交互式会话,在系统中创建一个进程
ssh ${USERNAME}@${IP} 			#ssh登陆远程主机
-o "StrictHostKeyChecking no"	#不弹出“(yes/no)?”的对话框
expect "password:"				#期望终端出现包含"password:"的字段。如果没有出现,则不执行后面的代码,会卡在此处,达到超时时间退出。
{send "${PWD}\r"}		#传递给交互终端的指令,这里是发送密码。\r相当于在终端敲了下回车
{send "hostname\r"}		#向远程主机发送hostname的指令
{send "exit\r"}			#最后一个expect不会执行,因此不会发送exit的指令,这里用来标识该expect要退出了

2.2.稍复杂方式,shell脚本调用expect脚本,并传入参数(推荐)

shell脚本

#!/bin/bash

IP="192.168.1.2"
USERNAME="root"
PWD="123456"

/usr/bin/expect -f expect.exp ${IP} ${USERNAME} ${PWD}

expect脚本expect.exp

#!/usr/bin/expect -f

#位置参数会存入数组$argv,与shell不一样
set IP [lindex $argv 0]
set USERNAME [lindex $argv 1]
set PWD [lindex $argv 2]

set timeout 6
spawn ssh ${USERNAME}@${IP}
expect {
	#如果有yes/no关键字
    "yes/no" {
    	#则输入yes
        send "yes\n"
        #输入yes后如果输出结果有"*assword:"关键字,则输入密码
        expect "*assword:" { send "${PWD}\n" }
    }
    #如果上次输出结果有"*assword:"关键字,则输入密码
    "*assword:" { send "${PWD}\n" }
    timeout  {   send_error "User 'root' login timeout.\n";  exit 1;  }
}


expect "#"
send "hostname\r"
expect "#"
send "exit\r"
expect eof

相关解释:
[lindex $argv 0]:expect.exp脚本的第一个位置参数,以此类推

set IP [lindex $argv 0]:把第一个位置参数的值赋给变量IP。注意:echo $IP会报错
在这里插入图片描述
这种写法表示,如果终端出现yes,会执行yes里面语句;没有yes会往后面匹配
在这里插入图片描述
如果超时,通过send_error打印错误信息到终端,并退出脚本,退出码为1

expect eof:spawn进程结束后会向expect发送eof,接收到eof代表该进程结束

Linux expect 介绍用法
10-18
expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。
Shell命令之expect
荣耀之路
04-21 1830
Shell命令之expect
shellshell脚本实战-expect语言的使用
2401_83817171的博客
03-27 912
在这里,由于面试中MySQL问的比较多,因此也就在此以MySQL为例为大家总结分享。但是你要学习的往往不止这一点,还有一些主流框架的使用,Spring源码的学习,Mybatis源码的学习等等都是需要掌握的,我也把这些知识点都整理起来了总结分享。但是你要学习的往往不止这一点,还有一些主流框架的使用,Spring源码的学习,Mybatis源码的学习等等都是需要掌握的,我也把这些知识点都整理起来了[外链图片转存中…(img-zuqElM63-1711477091194)]
Linux】命令expect使用详解
康师傅没有眼泪
11-16 5804
expect 是由Don Libes基于Tcl(Tool Command Language )语言开发的,是一种脚本语言,主要应用于自动化交互式操作的场景,借助Expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率。
linux 脚本之 expect命令使用
weixin_33744141的博客
09-06 241
1 概述expect 是由Don Libes基于Tcl(Tool Command Language )语言开发的,主要应用于自动化交互式操作的场景,借助Expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率2 语法expect命令expect 语法...
Python中进程和线程到底有什么区别?_python线程和进程的关系和区别
最新发布
m0_60707221的博客
04-26 268
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。工欲善其事必先利其器。
Shell 之 免交互编程(expect用法)
weixin_71438279的博客
08-16 2842
Here Document 是标准输 入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地 生产出一个文件并用作命令的标准输入,Here Document 可以与非交互式程序和命令一起使用。...............
linuxexpect介绍使用示例
09-15
expect是一种自动交互语言,能实现在shell脚本中为scp和ssh等自动输入密码自动登录。下面这篇文章主要介绍linux使用expect的方法示例,需要的朋友可以参考借鉴,下面来一起学习学习吧。
shell脚本无密码登录 expect使用方法详解
01-20
shell脚本无密码登录 expect使用方法详解 今天需要做一个定时任务脚本将最新的数据包文件传到远程的服务器上,虽然有密钥但也是要求输入密码的那种,所以只能另想办法实现让脚本自动输入密码了。 从网上查到使用...
linux编写脚本使用expect正则表达式 教程
11-09
linux script expect脚本编写方法
expect学习实践:咱有自动化脚本不用每次scp和ssh都输密码
11-25 389
expect实践:咱有自动化脚本不用每次scp和ssh都输密码
expect安装以及简单使用
lzw_me
04-06 3821
Expect简介 Expect是一个用来实现自动交互功能的软件套 件(Expect [is a] software suite for automating interactive tools)。使用它系统管理 员的可以创建脚本用来实现对命令或程序提供输入,而这些命令和程序是期望从终端(terminal)得到输入,一般来说这些输入都需要手工输入进行的。 1、依赖环境 expect依赖于tcl,但linux系统里一般不自带安装tcl,需要手动安装。 对于tcl的检测系统是否已经安装 rpm -qa
揭开Expect的神秘面纱
欲穷千里目,更上一层楼
07-30 1741
我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能。而Expect使用来实现这种功能的工具。 Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don Libes在1990年开始编写Expect时对Expect做有如
shell编程之免交互(EOF以及expect免交互)
qq_35456705的博客
01-07 990
xshell编程之免交互(EOF以及expect免交互) 文章目录xshell编程之免交互(EOF以及expect免交互)一、Here Document 免交互1.相关概念2.语法格式3.注意事项4.免交互示例1)免交互方式实现对行数的统计2)通过read命令接收输入并打印3)通过passwd给用户设置密码4)支持变量替换5)整体赋值给变量6)关闭变量替换的功能7)去掉每行之前的[Tab]字符8)多行注释二、Expect免交互1.基本命令1)脚本解释器2)spawn3)expect4)send5)结束符6)
shell中的expect语句
even160941的博客
06-11 2412
expect expect 是自动应答命令,用于交互式命令的自动执行。 借助Expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率 。 参数含义及说明 spawn 是 expect 中的监控程序,其运行后会监控命令提出的交互问题 send,发送问题答案给交互命令 ...
expect工具的简单用法
weixin_30483495的博客
08-17 88
原创文档,转载请注明作者与本文URL。 linux中的expect工具很不错,能够自动实现交互,也即是说自己自动进行ssh登录等动作。这是我写的一个简单的用法,稍作修改就可以变成很实用都脚本。有人介绍的很详细,我就直接上脚本了。 #!/usr/bin/expect -f #用expect实现自动交互 #期望的字符串必须出现,而且必须按顺序出现,send记得带上换行符 #指定要启动...
expect用法
Futures_的博客
12-06 256
装包:yum -y install expect spawn:运行某个命令,并监控命令提出的监控问题 expect:用于执行交互命令 send:发送答案给交互命令 "\r":回车 exp_continue:循环匹配下一条需要执行的交互命令 expect eof:问题回答完毕退出expect环境 interact:问题回答完毕留在交互界面 写法一,sh + expect #...
expect: spawn id exp4 not open原因解释
热门推荐
a200822146085的博客
06-21 2万+
脚本: #! /bin/bash auto_send(){ /usr/bin/expect <<EOF set timeout 10 spawn scp test.sh testhadoop@10.201.7.189:~ expect { "yes/no" { send "yes\r";exp_continue } "password" {send "VMUSidJEkZgKm...
TCL/expect使用
小庄往左走
12-01 1万+
<br />TCL是一种类似shell脚本的语言,你可以使用它来完成许多操作。不过,我介绍它的<br />主要原因是expect是从它发展出来的。如果你想要写一个能够自动处理输入输出的脚本<br />(如向用户提问并且验证密码)又不想面对C或者Perl,那么expect是你的唯一选择。<br /> <br />11.1.1 TCL语言<br />要使用TCL,你必须先安装这个程序:<br />% rpm -q tcl<br />tcl-8.0.5-30<br />TCL语言可以用交互式或者脚本的方式执行,要
python try expect 使用方法
06-28
Python中的try-except语句用于捕获和处理异常。它的基本语法如下: ``` try: # 可能会出现异常的代码块 except ExceptionType1: # 处理 ExceptionType1 异常的代码块 except ExceptionType2: ...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • MobaXterm常用设置 129886
  • awk命令详解 105828
  • docker run 命令详解(新手入门必备) 70914
  • Linux修改文件句柄数及vm.max_map_count、stack size的大小 69750
  • 解决DELL服务器识别不到硬盘的问题 55072

分类专栏

  • windows/工具 7篇
  • WEB 21篇
  • Linux 92篇
  • 监控 13篇
  • CI/CD 35篇
  • 自动化运维 9篇
  • 中间件 17篇
  • 数据库 24篇
  • K8S 62篇
  • git 5篇
  • jenkins 28篇
  • Go 1篇
  • 虚拟化 5篇
  • Groovy 10篇
  • java 3篇
  • Linux常用技巧 5篇
  • 攻略
  • 硬件 3篇
  • 技术 5篇
  • 网络 4篇
  • Shell 85篇
  • Docker 51篇
  • 问题解决 56篇
  • 项目 12篇
  • Python 79篇
  • 面试
  • 大数据 4篇
  • 工作

最新评论

  • 解决ansible-playbook执行时ssh连接timeout超时的问题

    Zszen_John: 你这个方法试了无效

  • 解决ansible-playbook执行时ssh连接timeout超时的问题

    Zszen_John: 我这里刚好有瘫痪的节点,表现为ping通,ssh端口也开着,但这个节点就是有问题,ssh自身走超时能断开,ansible所有节点被它卡的死死的

  • Linux修改文件句柄数及vm.max_map_count、stack size的大小

    wan_da_ren: sudo su 切换到root账号再执行 echo "vm.max_map_count=262144" >> /etc/sysctl.conf sysctl -p 即可

  • prometheus基于consul的服务发现

    CSDN-Ada助手: 云原生入门 技能树或许可以帮到你:https://edu.csdn.net/skill/cloud_native?utm_source=AI_act_cloud_native

  • awk命令详解

    运维@小兵: 谢谢提醒,哪里有问题可以告诉我,我去改下 只要坚持去写就可以的

大家在看

  • 如何在C#中实现多线程 755
  • Windows 10上安装Java的详细教程 425
  • 超详细Python教程——类的定义和调用 453
  • 盗版游戏缺少steamdll文件怎么办?游戏报错steam_api64.dll缺失解决方法
  • YOLOv10改进 | Conv篇 |YOLOv10引入动态蛇形卷积(Dynamic Snake Convolution)

最新文章

  • 如何使用Excel生成柱状图
  • DRF 常用功能
  • Vue前端开发入门
2024年15篇
2023年25篇
2022年77篇
2021年171篇
2020年143篇
2019年135篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

两个鬼故事寄生前夜1爱情动漫推荐上书房户外俱乐部gp5给财务公司起名大全参茸店起名大全给球队起个名字童男童女起名公司 英文起名大仲马飞天蜈蚣秋天的树叶作文三年级英语下册晨光熹微好名字起名测名网cad破解版下载100分起什么姓名机械加工公司起名网免费取名雅多维尔围城战212hh宁姓女孩起名子和平精英灵敏度压枪目前最稳2021晟字起名字男孩名字100起名工具网食用菌公司起名龙门吊起重机厂家排名字画商城玩亚索起什么名字好拼搏的英文男孩起名叫天什么好听少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化