linux base脚本编写-自动领取微信红包

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表示没有错误,其他任何值表示有错误
    image

基本运算


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树,并按规律对其进行分隔,后续获取数据的准确性
image
2- 封装一个根据所见的字符(微信红包 or 领取)分析其所在屏幕位置的中心坐标并进行点击click()方法
image
3 - 返回方法 back()
image
4 - 抢红包简单逻辑处理
image

运行

在一台可运行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
}
posted @ 2022-01-17 23:08  稀饭配菜根  阅读(579)  评论(0编辑  收藏  举报