Ubuntu16.04利用expect模拟键盘输入实现自动化交互
在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模拟键盘输入实现自动化交互相关推荐
- shell脚本模拟键盘输入完成程序交互(定时重启docker部署的项目样例)
shell脚本模拟键盘输入完成程序交互(定时从起docker部署的项目样例) 背景 最近有一个利用docker部署的组件(test1)每天晚上12-1点总是会停止工作,但又找不到异常原因,重启后恢复正 ...
- ssh跳板登陆太麻烦,使用expect每次自动登录 利用expect 模拟键盘动作,在闲置时间之内模拟地给个键盘响应...
#!/usr/bin/expect -f #设置超时时间 set timeout 3 #这里设置了跳板机的密码 set password "你的跳板机密码" #连接跳板机 spaw ...
- python 模拟键盘_Python 模拟键盘输入 pywinauto 自动化—模拟键盘操作
想要通过from 我们想要 源码: def send_keys(keys, pause=0.05, with_spaces=False, with_tabs=False, with_newlines= ...
- php虚拟键盘输入,[问题] bash下如何模拟键盘输入
你的位置: 问答吧 -> Shell -> 问题详情 [问题] bash下如何模拟键盘输入 我想要在bash下模拟键盘输入. 现在有两个实例. 1. 如果我在使用未配置sudo nopas ...
- vc++6.0 模拟鼠标点击代码 木马程序的编写 VC 模拟键盘输入
From: http://fengqing888.blog.163.com/blog/static/33011416201112124481/ MFC 工程 把以下代码放到你想要响应的函数里面就行 C ...
- 使用C#模拟键盘输入
假如你想做一个模拟键盘对当前的Active进程进行输入,该怎么办呢? 今天就介绍一个如何利用C#实现编程法模拟键盘输入 今天我们使用的是System.Windows.Forms.dll中的SendKe ...
- Win下模拟键盘输入的三种办法
最近闲着没事,就随意浏览博客,突然发现了一种模拟键盘输入的办法(之前一直想破脑袋的都没有想到的),然后借此机会说明一下. 具体实现方法 1)借用粘贴板 这是比较容易想到的,也最受程序员鄙视的一种办法, ...
- Ubuntu16.04虚拟机配置模拟路由器
Ubuntu16.04虚拟机配置模拟路由器 简介 环境搭建 设置IP地址 PC2设置路由 测试 简介 本文利用VMware中三台Ubuntu16.04虚拟机模拟实现路由转发功能,将其中一台虚拟机作为路 ...
- python模拟键盘输入字符_Python | 根据关键字符串遍历窗口 模拟键盘输入操作
在自动化脚本测试某个程序的过程中,偶尔会因为文件读取操作弹出各种信息窗口,导致自动化脚本无法继续往下执行.为了解决这个问题,需要隔一段时间对信息窗口进行一次遍历,针对需要处理的窗口进行模拟键盘输入操作 ...
最新文章
- go gdb调试 参数设置 减小执行文件体积
- ViewFlipper的使用
- Gateway网关-网关作用介绍
- 标志寄存器EFLAGES
- 三星全速进军物联网 所有产品都将内置互联功能
- 关于Spring 任务调度之task:scheduler与task:executor配置的详解
- word删除内容后不删除书签_Word涨薪88式第三式:书签的妙用
- gcn在图像上的应用_使用图卷积网络(GCN)做图像分割
- 如何在秋招中拿到offer?
- VS2010下C/C++连接MySql数据库的方法
- 简述对互联网产品经理的认识
- 【Python办公自动化】根据excel中数据批量生成word文档(适用劳动合同、质检报告、通知书等应用场景)
- Java整合ORC识别验证码
- [活动]和Jeffery大师的最近距离
- 儿童学习与发展指南《倾听与表达》篇
- 如何用函数求出身份证号码中的出生日期——CONCATENATE、MID函数的使用方法
- windows10 更新NVIDIA 显卡驱动
- 2020NISP一级(模拟题一)
- Wt(C++ Web) 源码编译以及cmake配置
- 数据库三种概念模型——层次模型,网状模型,关系模型的优缺点总结