Andorid源码编译需要掌握的shell语法(三)
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语法(三)相关推荐
- Linux Chromium源码编译
LInux Chromium源码编译 LInux下Chromium采用gn+ninja编译方式.老版的gyp方式已被抛弃,并且在默认情况下(is_clang 标志位为true),会使用clang编译器 ...
- gcc编译器和mysql源码哪个难_源码编译mysql 5.5
http://blog.csdn.net/aidenliu/article/details/6586610 源码编译mysql 5.5+ 安装过程全记录 分类: Mysql 2011-07-05 21 ...
- CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境
什么是LNMP? LNMP(别名LEMP)是指由Linux, Nginx, MySQL/MariaDB, PHP/Perl/Python组合成的动态Web应用程序和服务器,它是一组Web应用程序的基础 ...
- 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...
- LNMP架构环境搭建之mysql源码编译安装
Mysql MySQL是一个开源的数据库,在互联网行业应用的很广泛,下面来记录一下从源码编译安装的步骤,当然,MySQL也有其他安装方式,比如,使用yum下载安装rpm包,或者二进制方式安装,如果机器 ...
- Linux 下源码编译安装 vim 8.1
前言 目前 linux 的各个发行版基本上都是带了一个 vi 编辑器的,而本文要说的 vim 编辑器对 vi 做了一些优化升级,更好用.当我们需要远程操作一台 linux 服务器的时候,只能使用命令行 ...
- ubuntu 环境下调试mysql源码_【转】Ubuntu 16.04下 Mysql 5.7.17源码编译与安装
Ubuntu 16.04下 Mysql5.7.17源码编译与安装 系统环境 一. 系统安装条件 1.cmake MySQL使用cmake跨平台工具预编译源码,用于设置mysql的编译参数. sudo ...
- 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 ...
- 【流媒体服务器的搭建】2. 源码编译安装ffmpeg
前言 centos 7 ffmpeg 编译时,打开H264功能时,必须已安装H264(参考这里).否则遇错:ERROR: libx264 not found. 官网 http://ffmpeg.org ...
最新文章
- April Fools Contest 2018
- 做个爱学习的孩子!收藏2019知名机器学习暑期学校大列表
- SpringBoot+Vue+Openlayers实现地图上新增和编辑坐标并保存提交
- 20169207《Linux内核原理与分析》第五周作业
- open表和closed表_excel工作表合并,多文件数据一键合成
- leetcode 90. 子集 II 思考分析
- 新系统如何测试软件,怎样检测电脑能否升级到最新的Windows11系统?官方检测工具帮你一招搞定!...
- Tomcat log文件
- php 合并 js css,PHP实现合并多个JS和CSS文件示例
- 亚马逊服务器维护,Amazon EC2 维护帮助页面
- Alphabet高管:移动搜索为收入主要增长点 广告形式改进长期获益
- CE修改器使用教程 [入门篇]
- dubbo服务出现大量超时问题
- Django框架学习——4—(DTL模板标签、模版常用过滤器、模版结构优化、加载静态文件)
- netty_channal学习
- 思科2960交换机 - 配置命令大全
- JavaScript 变量命名规范总结
- mysql入门_高洛峰_简介_linux安装_远程连接配置_sql语句初始
- OpenFlow1.0协议解析
- 【c#】服务端客户端连接类
热门文章
- photoshop使用技巧_如何在Photoshop中使用表情符号
- JavaWeb项目excel文件导入
- Matlab绘图工具箱Gramm
- 虚拟机VMware6.5将厚置备转成精简置备
- Python分析42年高考数据,告诉你高考为什么这么难?
- Linux——信号量(定义、示例、信号量接口、ipcs命令)
- idea 忽略 node_modules 索引
- php获取随机数,PHP随机生成6位随机数
- c语言 fscanf的用法,fscanf []_c语言fscanf用法_fscanf fprintf(2)
- SublimeText 配置跳转回上个光标坐标