2017-08-26 16:05:05 quicmous 阅读数 10280
  • Linux操作系统及常用基础命令深入讲解

    本课程为全新马哥linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    29553 人正在学习 去看看 马永亮

如何在linux下shell编写脚本中模拟键盘输入

做Docker构建镜像的练习,写了下面这个 Dockerfile 文件,其中 yum install tomcat 执行过程中需要用键盘输入两次字符”y”以便确认选项,Dockerfile 脚本命令如下:

FROM centos
MAINTAINER quicmous "xuyeping@yeah.net"
RUN yes y | head -2 | yum install tomcat -y
RUN echo 'Hi, I am in your container'
EXPOSE 80

其中 yes 命令可以无限重复产生其后面的字符”y”,head 命令只选择其中两次重复输入,也就是两个字符”y”。命令行

yes y | head -2 | yum install tomcat -y

可以自动完成全部操作,中间过程不需要人工干预。

2015-08-16 08:18:28 lugandong 阅读数 5797
  • Linux操作系统及常用基础命令深入讲解

    本课程为全新马哥linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    29553 人正在学习 去看看 马永亮

前提:

在我们应用程序或者在写Android自动化测试时候常常会需要模拟实体按键,来给我们做测试用。这也是我要整理的目的。主要的涉及的是Linux Input Event事件。以下的例子基于Android 5.1(Linux-3.10)。

一、利用getevent、sendevent模拟按键

(1)命令:getevent -t
结果:

...
add device 6: /dev/input/event9  
  bus:      0000  
  vendor    0000  
  product   0000  
  version   0000  
  name:     "msm8994-snd-card Button Jack"  
  location: "ALSA"  
  id:       ""  
  version:  1.0.1  
  events:  
    KEY (0001): 0100  0101  0102  0103  0104  0105  0106  0107   
  input props:  
    <none>  
... 

得知:我们所要的耳机按键的对应的input事件是event9。

(2)命令:getevent -t /dev/input/event9 (getevent -l /dev/input/event9会有更加详细信息),使用按耳机按键预先获取耳机事件信息
结果:

按键按下:
0001 00e2 00000001
0000 0000 00000000
松下按键:
0001 00e2 00000000
0000 0000 00000000

(3)使用sendevent命令模拟触发线控按键事件

sendevent /dev/input/event9 0001 00e2 00000001
sendevent /dev/input/event9 0000 0000 00000000
**这个之间要延时500ms~1s,不然会被系统误认为是误触发的**
sendevent /dev/input/event9 0001 00e2 00000000
sendevent /dev/input/event9 0000 0000 00000000

注:只要是input的事件都是可以用sendevent来模拟,但有时候就力不从心了如模拟触摸屏的滑动,如果用sendevent就需要大量的命令来模拟。这时可以用input命令来代替。

二、利用input命令实现模拟按键、触摸屏操作

(1)模拟按键
命令:input keyevent {键值}
已知Android手机音量+(KEYCODE_VOLUME_UP)的键值是24,那使用
input keyevent 24就可模拟按下音量+键。更多的键值见附件1。

(2)模拟触摸屏操作(点按、滑动)
命令:input swipe {起始点x轴值} {起始点y轴值} {终点x轴值} {终点y轴值} {滑动时间[可忽略]},时间单位:ms
例如:从x=100,y=500,滑到x=600,y=500,时间100ms
input swipe 100 500 600 500 100

命令:input tap {x轴值} {y轴值}
例如:点击x=100,y=500这个点,模拟点击APP图标打开应用
input tap 100 500

附件1

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

2013-03-12 22:36:30 lingzhi007 阅读数 115
  • Linux操作系统及常用基础命令深入讲解

    本课程为全新马哥linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    29553 人正在学习 去看看 马永亮

 

网上有很多模拟键盘和鼠标的例子,单单击和双击的很少

 

linux/input.h中有定义,这个文件还定义了标准按键的编码等

struct input_event {
    struct timeval time;  //按键时间
    __u16 type; //类型,在下面有定义
    __u16 code; //要模拟成什么按键
    __s32 value;//是按下还是释放
};

code:
事件的代码.如果事件的类型代码是EV_KEY,该代码code为设备键盘代码.代码植0~127为键盘上的按键代码, 0x110~0x116 为鼠标上按键代码,其中0x110(BTN_ LEFT)为鼠标左键,0x111(BTN_RIGHT)为鼠标右键,0x112(BTN_ MIDDLE)为鼠标中键.其它代码含义请参看include/linux /input.h文件. 如果事件的类型代码是EV_REL,code值表示轨迹的类型.如指示鼠标的X轴方向 REL_X (代码为0x00),指示鼠标的Y轴方向REL_Y(代码为0x01),指示鼠标中轮子方向REL_WHEEL(代码为0x08).

type:
EV_KEY,键盘
EV_REL,相对坐标
EV_ABS,绝对坐标

value:
事件的值.如果事件的类型代码是EV_KEY,当按键按下时值为1,松开时值为0;如果事件的类型代码是EV_ REL,value的正数值和负数值分别代表两个不同方向的值.

 

           event.type = EV_KEY;

           event.code = BTN_LEFT;

           event.value = 1;

           write(fd, &event, sizeof(event));

如果 

type 设为键   code 设为左键   按 俩下  再放开  不就是双击了吗  实了下 真的可行。

如下函数 simulate_mousedoubleclick 就可以双击双击左键了。

当然  按一下再放开 就是单击时间。


      

 

 

 

 

void simulate_mousedoubleclick(int fd)

{

    struct input_event event;

        memset(&event, 0, sizeof(event));

        gettimeofday(&event.time, NULL);

 

            event.type = EV_KEY;

           event.code = BTN_LEFT;

           event.value = 1;

           write(fd, &event, sizeof(event));

 

           event.type = EV_KEY;

                     event.code = BTN_LEFT;

                     event.value = 1;

                     write(fd, &event, sizeof(event));

 

 

           event.type = EV_SYN;

                  event.code = SYN_REPORT;

                  event.value = 0;

                  write(fd, &event, sizeof(event));

 

 

                  event.type = EV_KEY;

                                      event.code = BTN_LEFT;

                                      event.value = 0;

                                      write(fd, &event, sizeof(event));

 

 

 

}

2016-04-07 14:14:37 C_Major 阅读数 697
  • Linux操作系统及常用基础命令深入讲解

    本课程为全新马哥linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    29553 人正在学习 去看看 马永亮

1. 工作中的一些问题

这里写图片描述

如上所示,在写病毒分析报告时,这些加密值要求纯大写字母。(该死的分析系统!)

还有类似一些小写字母转大写。
这里写图片描述

2.解决方案,Linux铁粉当然是用命令行了

通篇去掉指定字符
这里写图片描述
大写转小写
这里写图片描述

3.成功,什么?还有sed命令!

sed命令太不优雅!!!!!

2017-04-25 11:06:51 ch717828 阅读数 410
  • Linux操作系统及常用基础命令深入讲解

    本课程为全新马哥linux全套系列课程之一--Linux基础入门和架构了解,从Linux起源,Linux架构和Linux形成历史开始逐步讲解,让你彻彻底底了解Linux的诞生,之后介绍了Linux相关文化和核心组成结构,以及Linux常用命令和基本用法,课程由浅入深,讲授方法受到98%学员一致好评!

    29553 人正在学习 去看看 马永亮

获得用户输入

  • read命令:接受从标准输入(键盘)或另一个文件描述符的输入。
echo -n "Enter your name:";  #-n使得echo不换行
read name;
echo "Welcome $name";

read -p "Enter your age:" age #-p直接在read命令行指定提示符
days=$[ $age * 365 ];
echo "The day is $days";

if read -t 5 -p "Enter you last name:" name #-t指定read超时的秒数
then
        echo "Welcom $name";
else
        echo "Sorry,timeout";
fi

if read -n1 -p "Do you want continue[Y/N]" answer #-n指定达到输入的字符数后返回
then
case $answer in
Y | y)
     echo
     echo "fine,continue....";;
N | n) 
    echo
    echo "goodbye";
    exit;;
esac
fi
echo "Done";
  • 你可以在read命令行中不指定变量。如果这么做,read命令会将它收到的任何数据都放进特殊环境变量REPLY中。
  • -s选项会阻止将传给read命令的数据显示在显示器上(实际上,数据会被显示,只是文本颜色与背景相同)
  • read可以从文件中读取内容
file="/Users/chenhong/Desktop/shell_workspace/read.sh";
count=1;
cat $file | while read line
do
        echo "Line $count:$line";
        count=$[ $count + 1 ];
done

Linux系统按键驱动

阅读数 1185

没有更多推荐了,返回首页