1. 前言

最近在学习Android源码编译原理,涉及到MakeFile, Shell, Go语法,为了能看懂脚本文件,最快的掌握方法:一边看编译文件,一边学习语法规则,本篇文章记录的是关于Shell语法。Android编译工程涉及的基础知识杂广多,基础技能不扎实就好好补吧,记录下来。

如果不了解shell语法的,请移步前两篇文章:

Shell语法(一)_broadview_java的博客-CSDN博客

Shell语法(二)_broadview_java的博客-CSDN博客

2. 编译文件中语法记录

2.1 local语法

作用:一般用于shell内局部变量的定义,多使用在函数内部

关于局部变量和全局变量:
(1)shell 脚本中定义的变量是global的,作用域从被定义的地方开始,一直到shell结束或者被显示删除的地方为止。
(2)shell函数定义的变量也是global的,其作用域从 函数被调用执行变量的地方 开始,到shell或结束或者显示删除为止。函数定义的变量可以是local的,其作用域局限于函数内部。但是函数的参数是local的。
(3)如果局部变量和全局变量名字相同,那么在这个函数内部,会使用局部变量。

local 定义的变量一般是在函数中使用

2.2 date语法

date  +"%Y%m%d" -d  "+n days"         #今天的后n天日期  
date  +"%Y%m%d" -d  "-n days"         #今天的前n天日期
date +"%F"                                #输出: 2012-06-08
date +"%D"                                #输出: 06/08/12
date +"%Y%m%d %H:%M:%S"                   #输出: 20120608 04:52:28
date +"%Y%m%d"                            #输出: 20120608
date +"%Y%m%d %H:%M:%S" -d "+1 hours"     #输出: 20120608 05:52:43
date +"%Y%m%d %H:%M:%S" -d "+1 days"      #输出: 20120609 04:52:52
date +"%Y%m%d %H:%M:%S" -d "+1 months"    #输出: 20120708 04:52:56
date +"%Y%m%d %H:%M:%S" -d "+1 years"     #输出: 20130608 04:53:07
date +"%T"                                #输出: 05:03:21
date +"%F %T"                             #输出: 2012-06-08 05:03:34
date +"%D %T"                             #输出: 06/08/12 05:03:39
# 字符串转时间戳
date -d "2010-10-18 00:00:00" +%s   #输出:1287331200
# 时间戳转字符串
date -d @1287331200  "+%Y-%m-%d"    #输出:2010-10-18
# 获取指定日期的后N天,如果是前N天,则第二部中间是 -
步骤1:得到时间戳           seconds=`date -d "2010-10-18 00:00:00" +%s` 
步骤2:加上N天的秒数86400*N     seconds_new=`expr $seconds + 86400*N`  
步骤3:获得指定日前加上一天的日前   date_new=`date -d @$seconds_new "+%Y-%m-%d"`

2.3 tput语法

tput 命令主要用于设置终端工作模式,或读出终端控制字符。tput 命令与终端控制代码数据库terminfo 相连, 根据Shell 环境变量TERM 的值, 读出这种终端的指定功能控制代码

2)tput : 改变终端显示特性,常见用法如下:

tput lines : 显示终端的行数

tput cols : 显示终端的列数

tput cup line_number collum_number : 定位光标到 line_number 行,collum_number 列的位置

tput setb n : 其中 n 为 0-7 的数字,设置终端的背景颜色

tput setf n : 其中 n 为 0-7 的数字,设置终端的前景色,即字体的颜色

tput sc : 保存光标的位置

tput rc : 恢复光标到上一次保存的位置

tput ed : 清空光标所在位置到屏幕结尾的所有内容

tput smul : 设置下划线

tput rmul : 移除下划线

tput bold : 设置文本样式为粗体

显示方式 意义
0 终端默认设置
1 高亮显示
4 使用下划线
5 闪烁
7 反白显示
8 不可见
前景色 背景色 颜色
30 40 黑色
31 41 红色
32 42 绿色
33 43 黃色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色

2.4  wildcard语法

当shell在“参数”中遇到了通配符时,shell会将其当作路径或文件名去在磁盘上搜寻可能的匹配:若符合要求的匹配存在,则进行代换(路径扩展);否则就将该通配符作为一个普通字符传递给“命令”,然后再由命令进行处理。

总之,通配符 实际上就是一种shell实现的路径扩展功能。在通配符被处理后, shell会先完成该命令的重组,然后再继续处理重组后的命令,直至执行该命令。

 shell常见通配符:

字符 含义 实例
* 匹配 0 或多个字符 a*b  a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。
? 匹配任意一个字符 a?b  a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b。
[list]  匹配 list 中的任意单一字符 a[xyz]b   a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。
[!list]  匹配 除list 中的任意单一字符 a[!0-9]b  a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b。
[c1-c2] 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z] a[0-9]b  0与9之间必须也只能有一个字符 如a0b, a1b... a9b。
{string1,string2,...} 匹配 sring1 或 string2 (或更多)其一字符串 a{abc,xyz,123}b    a与b之间只能是abc或xyz或123这三个字符串之一。

需要说明的是:通配符看起来有点象正则表达式语句,但是它与正则表达式不同的,不能相互混淆。把通配符理解为shell 特殊代号字符就可。而且涉及的只有,*,? [] ,{} 这几种。

例如:

SRC = $(wildcard *.c)
等于指定编译当前目录下所有.c文件

如果还有子目录,比如子目录为inc,则再增加一个wildcard函数,象这样: 
SRC = $(wildcard *.c) $(wildcard inc/*.c)

Andorid源码编译需要掌握的shell语法(三)相关推荐

  1. Linux Chromium源码编译

    LInux Chromium源码编译 LInux下Chromium采用gn+ninja编译方式.老版的gyp方式已被抛弃,并且在默认情况下(is_clang 标志位为true),会使用clang编译器 ...

  2. gcc编译器和mysql源码哪个难_源码编译mysql 5.5

    http://blog.csdn.net/aidenliu/article/details/6586610 源码编译mysql 5.5+ 安装过程全记录 分类: Mysql 2011-07-05 21 ...

  3. CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境

    什么是LNMP? LNMP(别名LEMP)是指由Linux, Nginx, MySQL/MariaDB, PHP/Perl/Python组合成的动态Web应用程序和服务器,它是一组Web应用程序的基础 ...

  4. 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

    作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...

  5. LNMP架构环境搭建之mysql源码编译安装

    Mysql MySQL是一个开源的数据库,在互联网行业应用的很广泛,下面来记录一下从源码编译安装的步骤,当然,MySQL也有其他安装方式,比如,使用yum下载安装rpm包,或者二进制方式安装,如果机器 ...

  6. Linux 下源码编译安装 vim 8.1

    前言 目前 linux 的各个发行版基本上都是带了一个 vi 编辑器的,而本文要说的 vim 编辑器对 vi 做了一些优化升级,更好用.当我们需要远程操作一台 linux 服务器的时候,只能使用命令行 ...

  7. ubuntu 环境下调试mysql源码_【转】Ubuntu 16.04下 Mysql 5.7.17源码编译与安装

    Ubuntu 16.04下 Mysql5.7.17源码编译与安装 系统环境 一. 系统安装条件 1.cmake MySQL使用cmake跨平台工具预编译源码,用于设置mysql的编译参数. sudo ...

  8. python opencv源码_caffegpu源码编译

    软硬件环境 ubuntu 18.04 64bit NVidia GTX 1070Ti anaconda with python 3.7 CUDA 10.1 cuDNN 7.6 opencv 3.4.2 ...

  9. 【流媒体服务器的搭建】2. 源码编译安装ffmpeg

    前言 centos 7 ffmpeg 编译时,打开H264功能时,必须已安装H264(参考这里).否则遇错:ERROR: libx264 not found. 官网 http://ffmpeg.org ...

最新文章

  1. April Fools Contest 2018
  2. 做个爱学习的孩子!收藏2019知名机器学习暑期学校大列表
  3. SpringBoot+Vue+Openlayers实现地图上新增和编辑坐标并保存提交
  4. 20169207《Linux内核原理与分析》第五周作业
  5. open表和closed表_excel工作表合并,多文件数据一键合成
  6. leetcode 90. 子集 II 思考分析
  7. 新系统如何测试软件,怎样检测电脑能否升级到最新的Windows11系统?官方检测工具帮你一招搞定!...
  8. Tomcat log文件
  9. php 合并 js css,PHP实现合并多个JS和CSS文件示例
  10. 亚马逊服务器维护,Amazon EC2 维护帮助页面
  11. Alphabet高管:移动搜索为收入主要增长点 广告形式改进长期获益
  12. CE修改器使用教程 [入门篇]
  13. dubbo服务出现大量超时问题
  14. Django框架学习——4—(DTL模板标签、模版常用过滤器、模版结构优化、加载静态文件)
  15. netty_channal学习
  16. 思科2960交换机 - 配置命令大全
  17. JavaScript 变量命名规范总结
  18. mysql入门_高洛峰_简介_linux安装_远程连接配置_sql语句初始
  19. OpenFlow1.0协议解析
  20. 【c#】服务端客户端连接类

热门文章

  1. photoshop使用技巧_如何在Photoshop中使用表情符号
  2. JavaWeb项目excel文件导入
  3. Matlab绘图工具箱Gramm
  4. 虚拟机VMware6.5将厚置备转成精简置备
  5. Python分析42年高考数据,告诉你高考为什么这么难?
  6. Linux——信号量(定义、示例、信号量接口、ipcs命令)
  7. idea 忽略 node_modules 索引
  8. php获取随机数,PHP随机生成6位随机数
  9. c语言 fscanf的用法,fscanf []_c语言fscanf用法_fscanf fprintf(2)
  10. SublimeText 配置跳转回上个光标坐标