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搭配使用。


                                                                                                                                       

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值