文章写做周期:4月3日晚上9点左右开始11点结束。整个过程比较顺利...没有被其余奇奇怪怪的内容吸引~shell
说实话,写脚本这一块属实“业务不精”,一来现现在的工具已经比较方便了,二来本身仍是比较懒。编程
正巧最近再尝试公司的云编译功能,虽然云编译插件自动作了大量的工做,可是最终也只是把产物(apk)拉到本地某文件目录下,所以仍是须要咱们主动要install。bash
所以基于这个场景就像写一个脚本能够一键的把拉下的apk安装上。app
脚本须要的能力:编程语言
接下来我们就开整!不过...开篇咱也说了“业务不精”,因此Shell还真不会写。那么我们第一步就是先学一学Shell的语法。函数
开启语法的了解前,我们先聊一聊什么是Shell。工具
首先要明确一下,Shell是通用的概念,用来代指操做系统中的命令解释器(command interpretor)。能够简单的理解成“命令行”。ui
用过无GUI界面的Linux系统的同窗应该都清楚,咱们可以和操做系统打交道的方式只能经过输入命令。spa
而这个承接我们输入的命令并通知操做系统去执行对应操做的工具就被称之为Shell。操作系统
可是一般我们聊的Shell通常都是Linux下的,由于Linux下的Shell处理能充当命令解释器的做用,还拥有本身的编程语言,所以极具扩展性。我们的Shell脚本也是依赖了这种编译能力...
固然,Shell的强大远不止如此。更多能力就由你们去探索了~
变量:
Shell中的变量定义有些“蛋疼”...不声明任何类型,上来就是干:name="Shell"
,name就是一个变量。
这里还有一个更“诡异”的规定:=左右不能有空格!这个点坑了我好久,name= "Shell"
,这种声明是错误的!
当咱们使用变量的时候,须要加一个$
符。好比咱们想要打印上面定义的name
,咱们须要这样:echo $name
。
说到了$
,我们额外说一些内容:``
,$()
,${}
的区别。
它俩``
,$()
属于一类:命令的替换。这里如何理解呢?说白了就是把写在这里内容的结果拿出来(就想我们调用函数,拿返回值同样)。
所以有些时候,咱们可能不是为了执行某些命令,而是为了拿到命令对应的值,所以这种状况下就须要这种方式。
而${}
和我们平常是相似的,就是用{}的内容来替换这里。
脚本参数的获取:
我们通常执行在执行命令的时候都会遇到一些参数的输入,对于Shell脚本也是如此。想要拿到用户输入的参数怎么办?
直接这个样子:$1
,这中写法的意思就是拿到第一个参数,没错$2
就是拿到第二个参数...
函数:
函数的定义也是比较神奇,无需主动声明参数和返回值:
function getResult(){
first=$1
second=$2
return $first+$second
}
复制代码
这里定义了一个函数,能够看到函数体没有参数和返回值的信息。咱们要怎么调用呢?
getResult $1 $2
result=$?
echo "$result"
复制代码
这里可能有同窗注意到$?这个“奇怪”的调用,它的做用就是拿到上述函数的return。这里也是Shell里“蛋疼”的一点...
运行这个脚本后,效果是这样的:
有了这些基础我们想要完成我们须要额脚本就比较简单了。这里我先直接贴代码:
args=$1
curNewApk=""
# 这里是apk的目录
for apk in /Users/x/xx/xxx/*;
do
if [[ $curNewApk == "" ]]; then
curNewApk=$apk
else
# 这里获取当前apk的一个时间(小时+分钟),固然这里仅靠小时和分钟没法准确的肯定最新的文件,这里仅是提供一种思路
newApkTime=`stat -f %SB -t %H%m $apk`
lastApkTime=`stat -f %SB -t %H%m $curNewApk`
if [[ newApkTime > lastApkTime ]]; then
# 一个简单的给当前最新的apk赋值
curNewApk=$apk
fi
fi
done
echo "最新的apk:$curNewApk"
# 这里是获取第一个入参,若是是0进执行uninstall的操做
if [[ $args == "0" ]]; then
adb uninstall app.x.xx.xxx
fi
# 常规的install和启动Activity
adb install -r $curNewApk
adb shell am start -n x.xx.xxx.MainActivity
复制代码
这样,一个简单的脚本就ok了~它能作的事情:从一个目录下边找到一个最近修改的文件而后执行install,在start对应的Activity。
Shell脚本还挺有意思,的确能够很简单的帮咱们作不少重复的工做。
学无止境,学无止境~