在Linux的日常使用中,经常会有自动化交互的需要,如SSH,手动的操作繁琐、效率地下,使用expect工具可以模拟键盘输入,实现自动输入、自动交互。


1,安装 

sudo apt install expect

图 1


2,命令介绍

1. spawn: 指定和某个命令的进程进行交互,默认是和标准输入输出交互

2. expect : 等待进程的反馈,可以指定一个正则表达式字符串;

3. send : 向指定进程发送字符串,用于模拟键盘输入,加上'\n'表示Enter键。 通常与expect 结合使用, 表示等到期望的结果之后,再进行发送send指定的字符串;

4. interact: 停止自动交互,进入人工交互模式

5. 变量设置:  set name value

变量引用:  $name


3,具体使用

expect的使用类似Python,其实expect和Python都是解释器,Python是对Python语言编写的.py文件进行解释,而expect是对由expect确定的规则而编写的脚本.sh进行解释、执行。

示例一:使用 sudo turn-wifi-into-wifimode yes 打开友善之臂ARM板NanoPi-NEO2的WiFi的AP模式

交互过程:

pi@NanoPi-NEO2:~$: sudo turn-wifi-into-wifimode yes

Enter wireless name [default: friendlyelec-wifiap]: WIFILEE  #输入 sudo turn-wifi-into-wifimode yes命令后进行ap模式WiFi名的输入。

Enter password [default: 123456789]: 1234567890Lee  #输入完AP模式WiFi名后,进行WiFi密码的输入。

Enter password again: 1234567890Lee  #再次确认密码

图 2 脚本以及说明 test-expect.sh

执行命令:expect test-expect.sh  wififname wifipassword  (命令行传参,传入WiFi名和WiFi密码)

示例二:ssh远程访问

图3  ssh交互过程

图4 ssh利用expect自动交互脚本

执行命令:expect test-expect.sh  192.168.1.100 pi pi (命令行传参)


4,补充

1.这儿的脚本对应的解释器是expect,行首是#!/usr/bin/expect,一般脚本是#!/bin/bash,这点不同于bash shell脚本。但是,经测试按照一般shell脚本的写法也执行正常;

2.命令行传参也不同普通脚本:

普通的基于bash的shell脚本传参为:

$0:Shell本身的文件名;

$1~$n 脚本后面的命令行参数。$1是第1参数、$2是第2参数……

而expect脚本的命令行传参:expect则将脚本的执行参数保存在数组$argv中,而且在脚本中一般将其赋值给变量:set 变量名 [lindex $argv 参数号数]。此外,$argc为命令行参数的个数。[lrange $argv 0 0]表示第1个参数(或者[lindex $argv 0]),[lrange $argv 0 4]为第一个到第五个参数。与其他不同的是,$argv不包含脚本名字本身。

注意:$argv0和[lrange $argv 0 0]是不一样的。argv0是一个默认的变量名,而[lrang $argv 0 0]得到的是表argv的0个元素。

3.expect和send搭配使用。


            

Ubuntu16.04利用expect模拟键盘输入实现自动化交互相关推荐

  1. shell脚本模拟键盘输入完成程序交互(定时重启docker部署的项目样例)

    shell脚本模拟键盘输入完成程序交互(定时从起docker部署的项目样例) 背景 最近有一个利用docker部署的组件(test1)每天晚上12-1点总是会停止工作,但又找不到异常原因,重启后恢复正 ...

  2. ssh跳板登陆太麻烦,使用expect每次自动登录 利用expect 模拟键盘动作,在闲置时间之内模拟地给个键盘响应...

    #!/usr/bin/expect -f #设置超时时间 set timeout 3 #这里设置了跳板机的密码 set password "你的跳板机密码" #连接跳板机 spaw ...

  3. python 模拟键盘_Python 模拟键盘输入 pywinauto 自动化—模拟键盘操作

    想要通过from 我们想要 源码: def send_keys(keys, pause=0.05, with_spaces=False, with_tabs=False, with_newlines= ...

  4. php虚拟键盘输入,[问题] bash下如何模拟键盘输入

    你的位置: 问答吧 -> Shell -> 问题详情 [问题] bash下如何模拟键盘输入 我想要在bash下模拟键盘输入. 现在有两个实例. 1. 如果我在使用未配置sudo nopas ...

  5. vc++6.0 模拟鼠标点击代码 木马程序的编写 VC 模拟键盘输入

    From: http://fengqing888.blog.163.com/blog/static/33011416201112124481/ MFC 工程 把以下代码放到你想要响应的函数里面就行 C ...

  6. 使用C#模拟键盘输入

    假如你想做一个模拟键盘对当前的Active进程进行输入,该怎么办呢? 今天就介绍一个如何利用C#实现编程法模拟键盘输入 今天我们使用的是System.Windows.Forms.dll中的SendKe ...

  7. Win下模拟键盘输入的三种办法

    最近闲着没事,就随意浏览博客,突然发现了一种模拟键盘输入的办法(之前一直想破脑袋的都没有想到的),然后借此机会说明一下. 具体实现方法 1)借用粘贴板 这是比较容易想到的,也最受程序员鄙视的一种办法, ...

  8. Ubuntu16.04虚拟机配置模拟路由器

    Ubuntu16.04虚拟机配置模拟路由器 简介 环境搭建 设置IP地址 PC2设置路由 测试 简介 本文利用VMware中三台Ubuntu16.04虚拟机模拟实现路由转发功能,将其中一台虚拟机作为路 ...

  9. python模拟键盘输入字符_Python | 根据关键字符串遍历窗口 模拟键盘输入操作

    在自动化脚本测试某个程序的过程中,偶尔会因为文件读取操作弹出各种信息窗口,导致自动化脚本无法继续往下执行.为了解决这个问题,需要隔一段时间对信息窗口进行一次遍历,针对需要处理的窗口进行模拟键盘输入操作 ...

最新文章

  1. go gdb调试 参数设置 减小执行文件体积
  2. ViewFlipper的使用
  3. Gateway网关-网关作用介绍
  4. 标志寄存器EFLAGES
  5. 三星全速进军物联网 所有产品都将内置互联功能
  6. 关于Spring 任务调度之task:scheduler与task:executor配置的详解
  7. word删除内容后不删除书签_Word涨薪88式第三式:书签的妙用
  8. gcn在图像上的应用_使用图卷积网络(GCN)做图像分割
  9. 如何在秋招中拿到offer?
  10. VS2010下C/C++连接MySql数据库的方法
  11. 简述对互联网产品经理的认识
  12. 【Python办公自动化】根据excel中数据批量生成word文档(适用劳动合同、质检报告、通知书等应用场景)
  13. Java整合ORC识别验证码
  14. [活动]和Jeffery大师的最近距离
  15. 儿童学习与发展指南《倾听与表达》篇
  16. 如何用函数求出身份证号码中的出生日期——CONCATENATE、MID函数的使用方法
  17. windows10 更新NVIDIA 显卡驱动
  18. 2020NISP一级(模拟题一)
  19. Wt(C++ Web) 源码编译以及cmake配置
  20. 数据库三种概念模型——层次模型,网状模型,关系模型的优缺点总结

热门文章

  1. leetcode 移动零 淘宝购物车 失效宝贝
  2. 心平气和的解决mysql 的root密码不知道的麻烦
  3. 数据结构之二叉树(前提知识)
  4. 什么是RESTful,SpringBoot怎么引入丝袜哥(Swagger)
  5. UnityShader_泳池实现
  6. C# ASP.NET 生成二维码、加入图片
  7. 从零开始系统化学Java,大厂面试题汇总
  8. 崩溃捕捉的dump没有提供堆栈的问题
  9. RV1109EVB板的程序运行记录
  10. Java小白 电商项目总结