Linux利用expect模拟键盘输入实现自动化交互 | 您所在的位置:网站首页 › linux自动打包脚本 › Linux利用expect模拟键盘输入实现自动化交互 |
Linux expect命令是一个自动化工具,可用于编写交互式脚本以与其他命令行应用程序进行交互。 Expect命令通过监控和响应来自应用程序的输出,以及将其自己的输入发送到应用程序,实现了自动化交互。 Expect脚本可以用于执行复杂的操作,例如自动登录SSH会话,配置路由器,发送电子邮件等等。 Expect脚本使用Tcl语言编写,因此熟悉Tcl语言的人对其编写将更为容易。 Expect还具有用于在脚本中实现逻辑分支、循环和变量的Tcl语言功能,使其成为自动化命令行任务的有用工具。 而在Linux的日常使用中,经常会有自动化交互的需要,如SSH,手动的操作繁琐、效率地下,通过使用expect工具可以模拟键盘输入,实现自动输入、自动交互,提升效率。 一、安装 sudo apt install expect 二、命令介绍1. spawn: 指定和某个命令的进程进行交互,默认是和标准输入输出交互 2. expect : 等待进程的反馈,可以指定一个正则表达式字符串; 3. send : 向指定进程发送字符串,用于模拟键盘输入,加上'\n'表示Enter键。 通常与expect 结合使用, 表示等到期望的结果之后,再进行发送send指定的字符串; 4. interact: 停止自动交互,进入人工交互模式 5. 变量设置: set name value 6. 变量引用: $name 三、具体使用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 #输入 sudo turn-wifi-into-wifimode yes命令后进行ap模式WiFi名的输入 Enter wireless name [default: friendlyelec-wifiap]: WIFINAME Enter password [default: 123456789]: 1234567890 #输入完AP模式WiFi名后,进行WiFi密码的输入。 Enter password again: 1234567890 #再次确认密码现在通过expect脚本实现WiFi自动链接: expect脚本# 执行脚本: expect test-expect.sh wififname wifipassword (命令行传参,传入WiFi名和WiFi密码)示例二:ssh远程访问 ssh正常的交互过程现在通过expect脚本实现ssh自动链接: ssh利用expect自动交互脚本# 执行脚本: expect test-expect.sh 192.168.1.100 pi pi (命令行传参)四、补充这儿的脚本对应的解释器是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搭配使用。 |
CopyRight 2018-2019 实验室设备网 版权所有 |