expect 我们可以理解为一个可以提供自动化交互的工具,无需人的干预。
expect需要TCL变成语言的支持。


基本语法

for循环

格式:

for 空格 { 设置变量初始值 } 空格 { 条件判断 } 空格 {设置增量 } 空格 {
}

示例:

for { set i 0 } {$i < 2} { incr i } {puts "num is $i"
}

输出:

num is 0
num is 1

send:接收一个字符串参数,将参数发送到进程
expect:和send相反,根据进程输出的反馈,再发送(send)对应的交互命令或者进行其他的操作(可以理解为等待输出中输入特定的字符,然后发出特定的响应)
spawn:启动新的进程,spawn后的send和expect命令都是和使用spawn打开的进程进行交互
interact:允许用户交互。退出自动化,进入人工交互。
exp_continue:当执行完一个匹配时候,还可以继续执行匹配,如果没有exp_continue,匹配一次之后就会结束然后退出
$argc:表示参数个数,参数值存放在$argv中,比如取第一个参数就是[lindex $argv 0]


expect 使用示例

可以用expect来ssh远程登录服务器,就不需要每次自己输入密码(如下:例子二);
我们要根据用户不同的选项执行不同的操作,可以提供用户一个交互的输入(如下:例子一)

示例一:可以实现与用户交互,根据不同的选择,执行不同的操作的小例子

[danni@vm-xxx-18 expect5.45.3]$ cat Demo1.sh
#!/usr/local/bin/expect# send:向进程发送字符串
# expect:从进程接收字符串
# exp_continue:当执行完一个匹配时候,还可以继续执行匹配,如果没有exp_continue,匹配一次之后就会结束然后退出send "1:开启,2:关闭\n"
expect {"1" {send "哈哈开启了\n"exp_continue}"2" {send "呦呦关闭了\n"exp_continue}"quit"{exit}
}

执行结果:

[danni@vm-xxx-18 expect5.45.3]$ expect Demo1.sh
1:开启,2:关闭
1
哈哈开启了
2
呦呦关闭了
1
哈哈开启了
2
呦呦关闭了
1
哈哈开启了
1
哈哈开启了
quit
[danni@vm-xxx-18 expect5.45.3]$

传入参数的示例——————实现一个使用ssh远程登录的小例子
一般情况下,远程登录的时候都会人工交互性的要你输入密码,有的时候我们不想手动输入的时候,如何进行自动化操作呢?
expect可以帮我们实现,传入要登录的远端linux的ip,user,password,使用expect实现自动登录,通过spawn开启一个新的进程,当进程输出password的时候,我们就给进程send我们要输入的password,即可实现自动的连接。
$argc:表示参数个数,参数值存放在$argv中,比如取第一个参数就是[lindex $argv 0]
interact如果没有这一句,在登录完成后就会退出,而不是留在远程终端上

[danni@vm-xxx-18 expect5.45.3]$ cat Demo2.sh
#!/usr/local/bin/expectif {$argc < 3} {puts "Usage:cmd <host> <username> <password>"exit 1
}# 通过set设置变量
set host [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]# 通过spawn开启一个新的进程,接下来的expect和send都是针对于新的进程
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
interact
# interact:如果没有这一句,在登录完成后就会退出通过spawn开启的新进程,而不是留在远程终端上

执行结果:

[danni@vm-xxx-18 expect5.45.3]$ expect Demo2.sh 192.168.3.236 danni danni
spawn ssh danni@192.168.3.236
danni@192.168.3.236's password:
[danni@vm-xxx-18 ~]$

expect 基础语法学习 及 简单使用相关推荐

  1. Python基础语法学习笔记

    Python基础语法学习笔记 想淘宝省钱看我简介,博客www.liangxin.name (一) 一.Print()函数 1.数字可以直接输出,无需加引号 只能理解数字,却读不懂文字.因为数字和数学运 ...

  2. 【C++学习之路】第二章——C++基础语法学习(1)之黑客攻击系统

    2 C++基础语法学习(1)之黑客攻击系统 遵循原则:从实战中学习知识 法律声明:本系统仅能攻击自己搭建的网站,作为学习使用,不会触犯法律 time:2020.01.20 author:姜海天 IDE ...

  3. Go基础语法学习总结

    Go基础语法学习总结 一.基础语法 1.常见数据类型 数据类型包括有:布尔类型.字符串类型.数字类型(整型.浮点型.复数等).派生类型(数组类型.slice 切片类型.map 集合类型.struct ...

  4. 【Day3 C语言基础语法学习-2】

    Day3 C语言基础语法学习-2 一.输入输出函数 1.1 getchar()/putcgar() 1.1.1getchar() 1.1.2 putchar 1.2 gets()/puts() 1.2 ...

  5. Python基础语法学习6

    基础语法学习Day6 元组 1.元组就是不可变的列表 2.元组特有的一些方法和功能 (1)只有一个元素的元组:()中唯一的元素后需要添加逗号 (2)直接多个数据用逗号隔开表示的也是一个元组(元组的括号 ...

  6. Oracle PL/SQL基础语法学习13:比较运算符

    系列文章目录 Oracle PL/SQL基础语法学习12:短路求值 Oracle PL/SQL基础语法学习13:比较运算符 Oracle PL/SQL基础语法学习14:BOOLEAN表达式 文章目录 ...

  7. 【Day4 C语言基础语法学习-3】

    Day4 C语言基础语法学习-3 一 数组 1.1 数组的概念 1.2 一维数组 1.2.1 一维数组的定义 1.2.2 一维数组的性质 1.3 一维数组的初始化和遍历 1.4 冒泡排序法 二.二维数 ...

  8. Day5:Java基础语法学习6.9

    总目标:学会JAVA 本周目标:Java的入门知识(6.5--6.12) 今日目标:Java基础语法学习(1)6.9 注释 注释并不会被执行,是给我们写代码的人看的 Java中的注释有三种: 单行注释 ...

  9. Day1-软件使用及python基础语法学习总结

    Day1-软件使用及python基础语法学习总结 1.常用快捷键 Pycharm软件常用快捷键 快捷键 功能 ctr + s 保存 ctr + c 复制 ctr + v 粘贴 ctr + x 剪切 c ...

最新文章

  1. CentOS系统环境下安装MongoDB
  2. 如何在服务器端写关闭窗口的代码?同时能够更新父窗口?
  3. vi/vim 使用
  4. java逻辑代码_Java逻辑代码判断字数
  5. Microsoft .NET:Microsoft .NET之.net4.5.1简介、安装、使用方法之详细攻略
  6. 要求两个给定正整数的最大公约数和最小公倍数。_最小公倍数的求法,最大公因数要你有什么用...
  7. 如何做漂亮实用的UI界面?UI/UX设计模板,帮你入手!
  8. 隔离存取空间IsolatedStorage【WP7学习札记之十】
  9. projecteuler_problem11
  10. Atiitt 常见机器算法 理解 总结 目录 1. 机器学习的核心是“使用算法解析数据,从中学习,然后对世界上的某件事情做出决定或预测” 1 2. 1. 五大流派 2 2.1. ①符号主义:使用
  11. 2019年DNS服务器速度测评【DNS速度排名】
  12. 小白眼中的docker究竟是个什么东西
  13. ZYNQ基本使用(2) GPIO的使用
  14. 温莎计算机应用硕士是针对国际学生的吗,留学温莎大学
  15. 将图片资源放入 html 文件中
  16. 《微机原理与接口技术》简答题总结
  17. 全球地名中英文对照表(B)
  18. 第5章 CUDA存储器
  19. fabric2.2版本 单机测试环境搭建
  20. 0x00000000该内存不能为read

热门文章

  1. 线程进程,信号量,event事件,定时器,RLock,quene.Quene
  2. 算法题之个人所得税税率计算一(工资、薪金所得适用)
  3. java解析本地.geoJson地理信息,根据经纬度找到所在区域(全程Chatgpt3.5交互写代码,附gpt交流记录)
  4. mac 锁屏快捷键与qq的快捷键冲突 command + control + q
  5. bootstrapValidator select至少选择一个验证
  6. 夏日必备太阳镜的选购技巧
  7. 地面清洁新体验 智能扫地机器人排名前列的云鲸助你解放双手
  8. matlab stepwise 用法,stepwise函数使用问题
  9. 中医五行简要图片----中医哲学理论基础学习
  10. mysql 用户 %_mysql用户操作 - 可爱的wzz的个人空间 - OSCHINA - 中文开源技术交流社区...