一、概念

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 << EOFset timeout 6spawn 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/bashIP="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" {#则输入yessend "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代表该进程结束

expect用法介绍相关推荐

  1. linux expect中文,Linux expect用法介绍

    1.expect是linux中一个交互命令,一般在 /usr/bin/expect路径下,如果该路径未加入到环境中需要先添加,其作用场景常用于交互执行输入指令 常用命令: expect 获取上一命令执 ...

  2. linux expect循环用法,Linux expect用法介绍

    1.expect是linux中一个交互命令,一般在 /usr/bin/expect路径下,如果该路径未加入到环境中需要先添加,其作用场景常用于交互执行输入指令 常用命令: expect 获取上一命令执 ...

  3. [Linux] expect用法举例

    expect有助于自动化脚本中的交互过程的自动输入,例如远程登录需要输入确认信息.密码,安装脚本需要输入确认信息.用户名.密码.选择配置选项等等. expect内部命令中的expect可以匹配一个给定 ...

  4. awk 和sed的用法介绍

    awk 和sed的用法介绍 一.awk的介绍 1. 作用及用法要求 2. 使用方法 (1)使用的命令: (2)举例说明: 二.sed的介绍 1. 用法介绍及常用命令 2. 具体使用 一.awk的介绍 ...

  5. Scanpy(一)AnnData数据结构与一些API用法介绍

    目录 Scanpy简介与安装 AnnData AnnData的结构 h5ad:AnnData的写入和读取 Scanpy中一些常用api的用法介绍 sc.pp.filter_cells sc.pp.fi ...

  6. php中使用mysql的视图_MYSQL中视图的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于MYSQL中视图的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.什么是视图 执行一条SQL,将结果集保存在一张虚拟表中 (相关 ...

  7. pm2常用的命令用法介绍

    pm2 是一个带有负载均衡功能的Node应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的,下面我们来看pm2常用的命令用法介绍吧 ...

  8. predicate java_java8中predicate的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于java8中predicate的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 传递代码 我们首先看一个例子,假设你有一个 Appl ...

  9. c++ stl容器vector删除(erase),遍历等基本用法介绍及头文件

    Vectors 包含着一系列连续存储的元素,其行为和数组类似.访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线 ...

最新文章

  1. dedecms vdimgck.php,织梦dedecms后台验证码图片不显示解决方案
  2. 信息系统项目管理师之风险管理
  3. 复习上学期的HTML+CSS(1)
  4. 要么干,要么滚,千万别混
  5. 信息学奥赛一本通(1408:素数回文数的个数)
  6. mysql链接出错_请配置/amysql/config.php文件_MySQL数据库之PHP连接mysql时mysql_connect()函数不可用...
  7. 苹果mac可视化数学分析软件:matlabr2021b
  8. Error:Execution failed for task ':clean'. Unable to delete directory :\build\intermediates (转)...
  9. A - 棋盘问题 POJ - 1321(深搜)
  10. uni-app多端开发,问题总结
  11. Python办公自动化【Word】
  12. Mac上qmc0文件转码为mp3
  13. WPS2000的目录提取(转)
  14. spring 通过yml格式配置log日志
  15. word流程图怎么使箭头对齐_word流程图箭头怎么画
  16. 【玩转微信公众平台之中的一个】序章(纯粹扯淡)
  17. Unity平行光源方向_WorldSpaceLightPos0自定义
  18. pytorch深度学习中每个epoch运行时间的统计代码
  19. 计算机老师开学第一堂课,开学第一堂课作文(精选8篇)
  20. mysql是串行还是并行的_sql执行的作业是串行还是并行的?

热门文章

  1. css 文字倒影效果
  2. JMeter 高并发测试
  3. 分辨率高,清晰度高?
  4. android开机自启动应用日志标志,制作Android启动Logo
  5. 操作系统~假脱机SPOOLing技术与缓冲区管理
  6. 生成随机数、随机颜色(rgb格式)
  7. Word文件自动恢复问题小结
  8. OwlCarousel使用
  9. 使用Matlab计算两条线的交点及三角形垂心
  10. 装好卫生间的三大要素