一起来写个Shell脚本吧

前言

文章写作周期:4月3日晚上9点左右开始11点结束。整个过程比较顺利...没有被其他奇奇怪怪的内容吸引~

说实话,写脚本这一块属实“业务不精”,一来现如今的工具已经比较方便了,二来自己还是比较懒。

正巧最近再尝试公司的云编译功能,虽然云编译插件自动做了大量的工作,但是最终也只是把产物(apk)拉到本地某文件目录下,因此还是需要我们主动要install。

因此基于这个场景就像写一个脚本可以一键的把拉下的apk安装上。

脚本需要的能力:

  • 找到某文件路径下最新的apk
  • install这个apk
  • 然后打开主Activitiy

正文

接下来咱们就开整!不过...开篇咱也说了“业务不精”,所以Shell还真不会写。那么咱们第一步就是先学一学Shell的语法。

一、Shell基础

开启语法的了解前,咱们先聊一聊什么是Shell。

1.1、什么是Shell

首先要明确一下,Shell是通用的概念,用来代指操作系统中的命令解释器(command interpretor)。可以简单的理解成“命令行”。

用过无GUI界面的Linux系统的同学应该都清楚,我们能够和操作系统打交道的方式只能通过输入命令。

而这个承接咱们输入的命令并通知操作系统去执行对应操作的工具就被称之为Shell

但是通常咱们聊的Shell一般都是Linux下的,因为Linux下的Shell处理能充当命令解释器的作用,还拥有自己的编程语言,因此极具扩展性。咱们的Shell脚本也是依赖了这种编译能力...

当然,Shell的强大远不止如此。更多能力就由大家去探索了~

1.2、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里“蛋疼”的一点...

运行这个脚本后,效果是这样的:

image

二、按需写脚本

有了这些基础咱们想要完成咱们需要额脚本就比较简单了。这里我先直接贴代码:

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脚本还挺有意思,的确可以很简单的帮我们做很多重复的工作。

学无止境,学无止境~

我是一个应届生,最近和朋友们维护了一个公众号,内容是我们在从应届生过渡到开发这一路所踩过的坑,以及我们一步步学习的记录,如果感兴趣的朋友可以关注一下,一同加油~

个人公众号:咸鱼正翻身
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,380评论 0 5
  • 来源: Linux命令行与shell脚本编程大全 博客地址,推荐电脑点 内容 基本的脚本函数返回值在函数中使用变量...
    王诗翔阅读 2,459评论 0 3
  • 特别说明:以下内容来自简书,链接为原文出处,一切权益归原作者所有,在此感谢原作者的分享,大家可以点击以下链接查看原...
    沈祥佑阅读 551评论 0 4
  • 用了caffe有一段时间了,感觉自己写shell脚本的能力有待提高,特地从菜鸟笔记处系统的看了一遍,其实学习基础就...
    yichen_china阅读 1,821评论 2 30
  • 第 2 章 SHELL 基础知识2.1 shell脚本我们在上面简单介绍了一下什么是shell脚本,现在我们来进一...
    LiWei_9e4b阅读 1,562评论 0 0