一.在shell脚本中嵌入expect来实现密码输入
expect是一个自动交互功能的工具。expect是开了一个子进程,通过spawn来执行shell脚本,监测到脚本的返回结果,通过expect判断要进行的交互输入内容(send)
1.安装expect 
需要先安装tcl:apt-get install tcl
apt-get install expect
 
2.expect使用
2.1一个简单的输入密码操作
#!/usr/bin/expect
set timeout 100
set password "123456"
spawn sudo rm -rf zzlogic
expect "root123456"
send "$password\n"
interact
说明:
第一行#!/usr/bin/expect表示使用expect的shell交互模式
set是对变量password赋值
set timeout 100:设置超时时间为100秒,如果要执行的shell命令很长可以设置超时时间长一些。expect超过超时时间没有监测到要找的字符串,则不执行,默认timeout为10秒
spawn在expect下执行shell脚本
expect对通过spawn执行的shell脚本的返回进行判断,是否包含“”中的字段
send:如果expect监测到了包含的字符串,将输入send中的内容,\n相当于回车
interact:退出expect返回终端,可以继续输入,否则将一直在expect不能退出到终端
 
2.2expect的命令行参数
[lindex $argv n]获得index为n的参数(index从0开始计算)
$argc为命令行参数的个数
[lrange $argv 0 0]表示第一个参数
[lrange $argv 0 3]表示第1到第3个参数
 
例如scp_service.sh文件,可以./scp_service.sh -rm来执行,这时是赋值了一个参数
set option  [lindex $argv 0](获得第一个参数存到变量option中,参数是的index是从0开始计算的)
 
2.3if...elif...else...
expect支持if语句,
if {条件1} {
     条件1执行语句
} elif {条件2} {
     条件2执行语句
} else {
     其他情况执行语句
}
说明:
1.if的条件用{}来包含条件
2.if和后面的{}必须有空格隔开
3.两个花括号之间必须有空格隔开,比如if {} {},否则会报错 expect:extra characters after close-brace
3.使用{来衔接下一行,所以if的条件后需要加左花括号{
4.else不能单独放一行,所以else要跟在}后面
2.4 expect {},多行期望,匹配到哪条执行哪条
背景:有时执行shell后预期结果是不固定的,有可能是询问是yes/no,有可能是去输入密码,所以可以用expect{}
花括号内放多行语句,从上至下匹配,匹配到哪个expect执行哪句。
 
3.shell中调用expect来实现登录
我是通过在shell脚本中执行expect脚本的方式来实现的。当然可以将shell中定义的一些变量传递给expect脚本作为参数输入。可以见我下图调用的一个例子
 
说明:经过这次尝试些expect,给我的感觉是expect对格式的要求比较高,比如花括号之间必须有空格啊之类的,所以如果有报错,大家可以仔细观察一下是不是语法格式错误了。

shell expect的简单实用相关推荐

  1. shell expect的简单用法

    为什么需要expect?     我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如 telnet服务器等进 ...

  2. Mockito简单实用教程 - 第一部分mock

    Mockito简单实用教程 - 第一部分mock 环境介绍 依赖 内容 1. 检验方法是否有被调用 2. 指定mock方法的返回值 3. 验证指定次数 4. 验证异常 5. 校验执行顺序 6. 校验形 ...

  3. 日程定时提醒程序C语言,DIY一个高大上带提醒的计时器,简单实用,你还在等什么...

    DIY一个高大上带提醒的计时器,简单实用,你还在等什么 发布时间:2020-07-19 15:02:29 来源:51CTO 阅读:1124 作者:实验楼 小编心语:锵锵锵!小编我又来了!昨天发了一篇比 ...

  4. Studio 3T简单实用

    Studio 3T简单实用 Robo 3T是Robomongo的升级版本 ,是MongoDB的视图操作工具. 文章目录 Studio 3T简单实用 一.下载地址:[ https://robomongo ...

  5. php调色板快捷键,Linux_制作简单实用的调色板工具,把如下代码加入body区域 - phpStudy...

    制作简单实用的调色板工具 把如下代码加入 区域中: 红 绿 蓝 灰 function hexit(which) hexit=hex(which) end function for(i=0;i<= ...

  6. 一个简单实用的,基于EF的三层架构

    到底什么样的框架才是好框架呢?或许不同人有不同的看法.我个人觉一个好的框架,最重要的要是简单实用,能快速适开发,可维护性高(不会出现复制黏贴的代码),并能快速响应各种业务场景的变化的框架,同时性能不会 ...

  7. html 可调节进度条控件,jQuery简单实用的轻量级进度条插件

    jQMeter是一款简单实用的轻量级进度条jQuery插件,它可以显示为水平或垂直进度条,进度条加载时带有动画特效,你只需要简单的传入一些参数到jQMeter对象的构造函数中就可以完成你想要的进度条效 ...

  8. 分享几个用 Python 给图片添加水印的方法,简单实用

    作者 |俊欣 来源 |关于数据分析与可视化 今天来分享几种可以给图片添加水印的方法,都是十分的简单实用,大家在看了之后也可以私底下去自己试试,有些方法需要的代码量就比较少,有些方法需要的代码量就稍微多 ...

  9. matlab简单程序实例_visual basic VB.NET实例系列教程第一节(简单实用抽奖程序)...

    近期疫情原因,工作比较不忙,所以打算出一套零基础,VB.NET实例系列入门教程,实用又好玩,带大家进入VB的编程世界里,希望这套图文教程能帮到有需要的人! 第一节(简单实用抽奖程序) 内容准备:编译环 ...

最新文章

  1. python生成一段时间
  2. 临床研究中的基因组学、药物基因组学、蛋白质组学和转录组学 Omics in Clinical Practice: Genomics, Pharmacogenomics, Proteomics, and
  3. 电子商务公司的职能架构及基础岗位职能
  4. 如何设置Jupiter Notebook服务器并从任何地方访问它(Windows 10)
  5. 【HDU - 5489】Removed Interval(离散化,权值线段树,思维,最长上升子序列)
  6. 数字图像处理总结(冈萨雷斯版)
  7. PHP笔记-平润年判断例子
  8. git push 使用总结
  9. pytorch学习笔记(六):softmax回归
  10. webpack中library和libraryTarget详解
  11. RestTemplate发起HTTPS请求
  12. 网上五花八门的单片机教程,到底应该怎么整理学习过程
  13. mysql cast和convert函数
  14. OSPF综合实验(有点难哦!)
  15. 如何监控防火墙后的流量?
  16. linux系统的ftp命令大全,Linux-FTP命令大全(完整版)
  17. AiraNg配合RileRun下载及观看神器,包括(Aria搭建方法,AriaNg搭建问题)
  18. snmp v3 参数_SNMP V3的配置指南
  19. HSI、HSV、RGB、CMY、CMYK、HSL、HSB、Ycc、XYZ、Lab、YUV颜色模型(转)
  20. Java曲线之削峰填谷,Sentinel匀速模式(削峰填谷)

热门文章

  1. 一起学习C语言:初步进入编程世界(三)
  2. android https详解,如何使用HTTPS和HTTP来解析Android中的JSON数据?
  3. 【PyTorch】lr_scheduler.StepLR==>调整学习率的方法
  4. IDEA查看Scala的源码
  5. jquery on()方法和bind()方法的区别
  6. 设置Android客户端进入时的随机欢迎语
  7. [Matlab] 变量名与字符串的互相转换的正确方法
  8. C语言字符5,c语言总览5:字符输入和输出
  9. java进程调度怎么画图,[Java教程]进程调度的两种算法JAVA实现
  10. spire.pdf转图片质量_工作了3年,我只服这5个高质量的办公网站,送给正在加班的你...