bash脚本编写

语法

变量

定义:
your_name = "ABC"
使用:
echo $your_name

只读变量

a = "123"
readonly a : 不能更改或者删除a变量

删除变量

unset your_name

控制语句

if

if条件; then 执行语句1、2; fi结束
if [2==2]; then echo "true"; else echo "false"; fi
if[[2>1]]; then echo "true"; else echo "false"; fi (如果使用大于小于号 要使用双中括号)
- 如果想只使用一个中括号可以使用 -gt(大于) -lt(小于) -eq(相等)

for

- for loop in 1 2 3 4 5
- do
echo
- done

while

如果条件成立 则执行do 如果不成立 则跳出循环
while 条件 do 命令  done
demo.sh
#!/bin/bash
- int=1
- while ($int>=5)
- do
- echo %int
- let "int++"
- done
- while read i; do echo $i; done<test.txt (从test读取数据)

read命令

  • 终端或者从文件中读取输入的内部命令
  • 读取整行输入
  • 每行末尾的换行符不读入

使用

  • 标准读入赋值:read var 直接跟变量可以是多个变量 read var var1
  • 不指定变量:read 默认赋值给REPLY

脚本参数传递

当执行脚本的时候加入空格 再加参数,脚本就能接收到参数(获取终端输入)可以对脚本参数进行以下操作

  • $0: 脚本名称
  • $1~$n: 获取参数
  • $#: 传递到脚本的参数个数
  • $$: 脚本运行的当前进程ID号
  • $*: 以一个单字符串显示所有向脚本传递的参数(显示所有的参数)
  • $?: 显示命令的最后退出状态。0表示没有错误,其他任何值表示有错误

基本运算


a=10 b=20

+ 加法 `expr $a + $b` 结果为30
- 减法 `expr $a - $b` 结果为-10
* 乘法 `expr $a \* $b` 结果为200 (此处加入转义字符 \)
/ 除法 `expr $b / $a` 结果为2
% 取余 `expr $a % $b` 结果为10
= 赋值 a=$b 将变量b的值赋给a 此时a=20
== 相等 相等则返回true: [$a == $b] 返回false
!= 不相等 不相等则返回true: [$a != $b] 返回true
-eq 检测相等 [$a -eq $b] 返回false
-ne 检测不相等 [$a -ne $b] 返回true
-gt 检测左边是否大于右边 [$a -gt $b] 返回false
-lt 检测左边是否小于右边 [$a -lt $b] 返回true
-ge 检测左边是否大于等于右边 [$a -ge $b] 返回false
-le 检测左边是否小于等于右边 [$a -le $b] 返回true

实战-自动领取微信红包

实现目标

自动领取微信群红包 脚本会轮询查找微信红包,如果发现有红包出现将自动点击 微信红包 - 点击打开 - 返回

适合场景

快速抢红包

待改进
  • 当前页面处于某一个群
  • 只能快速抢领当前页面所见红包,即,瞬时时间发红包的人数过多,红包瞬时数量过大,导致红包可以展示超出屏幕
基本步骤

点击群红包 - 点击领取 - 点击返回

思路

1 - 使用android自带工具uiautomator dump 封装一个方法page_source():将当前页面下载成dom树,并按规律对其进行分隔,后续获取数据的准确性



2- 封装一个根据所见的字符(微信红包 or 领取)分析其所在屏幕位置的中心坐标并进行点击click()方法



3 - 返回方法 back()



4 - 抢红包简单逻辑处理

运行

在一台可运行shell程序的pc上运行抢微信红包脚本;移动端微信app当前页面处于群聊天页面,坐等别人发红包即可

完整代码
#!/bin/sh

page_source() {
adb shell "uiautomator dump && cat /sdcard/window_dump.xml" |
sed 's#><#>^<#g' |
awk 'RS="^"'
} click() {
local keyword="$1"
page_source |
grep "$keyword" |
awk -F '\\[|\\]|,' '{print ($(NF-5)+$(NF-2))/2,($(NF-4)+$(NF-1))/2}' |
{
read x y
echo $keyword = $y >$x
adbs shell input tap $x $y
} } send_keys() {
local text="$1"
adb shell input text $text
} back() {
adb shell input keyevent 4
} get_text() {
sed 's#.* text="\([^"]*\)".*#\1#'
} dingqunhongbao() {
local count=0
while true; do
local tmp_count=$(page_source | grep id/u1 | wc -l)
if [ ! "$tmp_count" = "$count" -a "$tmp_count" -gt 0 ]; then
click 微信红包
click 开
back
else
echo same count $tmp_count
fi
count=$tmp_count
done
}

linux base脚本编写-自动领取微信红包的更多相关文章

  1. Python+Appium实现自动抢微信红包

    前言 过年的时候总是少不了红包,不知从何时开始微信红包横空出世,对于网速和手速慢的人只能在一旁观望,做为python的学习者就是要运用编程解决生活和工作上的事情. 于是我用python解决我们的手速问 ...

  2. Linux 用脚本编写搭建yum本地仓库

    Linux 用脚本编写搭建yum本地仓库 源码如下: #!/bin/bash #该脚本用于自动化搭建本地yum仓库 #挂载光盘 #作者:雨中落叶 #博客:https://www.cnblogs.com ...

  3. Linux Shell脚本之自动修改IP

    作为一名Linux SA,日常运维中很多地方都会用到脚本,而服务器的ip一般采用静态ip或者MAC绑定,当然后者比较操作起来相对繁琐,而前者我们可以设置主机名.ip信息.网关等配置.修改成特定的主机名 ...

  4. shell脚本编写-自动部署及监控

    1.编写脚本自动部署反向代理.web.nfs: I.部署nginx反向代理两个web服务,调度算法使用加权轮询 II.所有web服务使用共享存储nfs,保证所有web都对其有读写权限,保证数据一致性: ...

  5. linux shell 脚本 svn自动更新项目并且打包 、发布、备份

    这里先准备一个配置文件,用于保存svn地址.目的路径.用户名跟密码 配置文件名问:toolConfig.properties #svn地址 svnAddress=https://192.168.1.2 ...

  6. linux Shell 脚本编写

    1. http://www.jb51.net/article/28514.htm 2. http://www.runoob.com/linux/linux-shell.html

  7. linux服务脚本编写

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  8. 10个实战及面试常用Linux Shell脚本编写

    来自:http://blog.51cto.com/lizhenliang/1929044 注意事项 1)开头加解释器:#!/bin/bash 2)语法缩进,使用四个空格:多加注释说明. 3)命名建议规 ...

  9. 在linux下实现mysql自动备份数据

    使用的系统为CentOS,mysql版本为5.6 备份功能主要利用以下功能实现: mysql命令中的mysqldump命令 linux下脚本编写 linux下crontab定时任务的使用 首先确定你要 ...

随机推荐

  1. 解决Tensorflow ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type numpy.ndarray)

    问题描述 在将一个数组送入tensorflow训练时,报错如下: ValueError: Failed to convert a NumPy array to a Tensor (Unsupporte ...

  2. iNeuOS工业互联网操作系统,发布3.6.4版本:云端安全控制和实时日志功能,附Chrome、Firefox和Edge浏览器测试性能对比

    目       录 1.      概述... 2 2.      平台演示... 2 3.      云端控制和实时日志设计和技术... 2 4.      实时日志测试... 2 1.   概述 ...

  3. CF1492B Card Deck 题解

    Content 有 \(n\) 张纸牌组成的一个牌堆,每张纸牌都有一个价值 \(p_1,p_2,\dots,p_n\).每次选出最顶上的几个牌放到另外一个一开始为空的牌堆里面.定义一个牌堆的总值为 \ ...

  4. JENKINS中创建全局变量并在JOB中使用

    配置了一个 "PASSWORD"的变量值 然后再脚本里面使用   注意这里必须要用双引号 不然不行

  5. 分享一下java需要的一些技术

    1.前言 you are 大哥,老衲很佩服你们_.还是一样的,有我联系方式的人,哪些半吊子不知道要学习哪些技术,一天让我整知识点,老衲也有事情做的,哪有那么多时间来一直搞知识点啊,我的博客更新很慢的, ...

  6. Go1.18中的泛型编程

    目录 目录 前言 泛型是什么 Go的泛型 泛型函数 泛型类型 类型集合 和接口的差异 总结 前言 经过这几年的千呼万唤,简洁的Go语言终于在1.18版本迎来泛型编程.作为一门已经有了14年历史的强类型 ...

  7. Windows串口之解决包含setupapi.h还提示找不到符号报错

    关于 本文演示环境: win10 1909 + VS2017 1. 错误信息 明明已经添加了头文件setupapi.h 和 库 setupapi.lib, 却还是提示报错,报错信息: 1>C:\ ...

  8. Balancing Act(poj1655)

    Balancing Act Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12703   Accepted: 5403 De ...

  9. Anti-prime Sequences

    Anti-prime Sequences Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 3355   Accepted: 1 ...

  10. Gumbel distribution

    目录 概 主要内容 定义 Gumbel-Max trick Gumbel trick 用于归一化 代码 概 感觉这个分布的含义很有用啊, 能预测'最大', 也就是自然灾害, 太牛了. 主要内容 定义 ...