Linux利用expect模拟键盘输入实现自动化交互 您所在的位置:网站首页 linux自动打包脚本 Linux利用expect模拟键盘输入实现自动化交互

Linux利用expect模拟键盘输入实现自动化交互

2023-03-13 09:40| 来源: 网络整理| 查看: 265

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 实验室设备网 版权所有