shell和Makefile
来源:互联网 发布:mac系统没有了 编辑:程序博客网 时间:2024/06/10 14:17
Shell的介绍
Shell是操作系统的终端命令行,是一类编程语言(叫脚本语言),常用的shell语言有sh、bash、csh、ksh、perl、python。在Linux下常用的脚本语言是bash、sh。Shell脚本的运行机制:解释运行。不像C语言那样,编译链接形成二进制文件才能执行,脚本语言编写好后代码可以直接运行,并没有编译链接过程(可能是逐行解释时已经转换成二进制)。Shell程序是文本格式,只要是文本编辑器都可以支持,在linux下的换行符为\n,而在windows下的换行符为\r\n。
Shell运行的三种方法
第一:./xx.sh 和运行二进制可执行程序一样,这样就要求文件有可执行
权限(chmod a+x xx.sh)。
第二:source xx.sh source是Linux的一个命令,这个命令就是用来执行脚本程序,这样运行不需要脚本具有可执行权限。
第三:bash xx.sh bash是一个脚本解释器,本质上是一个可执行程序,这样执行相当我们执行了bash程序,然后把xx.sh作为argv[1]传给他与运行。
Shell的格式
开头#!bin/sh 这行话以#!开始,后面加上一个pathname,意思就是指定shell程序执行时被哪个解释器执行。(#!bin/sh 或者 #!bin/bash)。Shell的注册符号是#。变量的引用符号$。变量引用的时候可以$var,也可以${var}。这两种的区别是在某些情况下只能用${var}而不能简单的$var。
Shell中的双引号:$加变量名可以去变量的值,反引号表示命令替换。\$表示$的字面值(输出$符号)。
\`表示`的字面值
\"表示"的字面值
\\表示\的字面值
除以上情况之外,在其它字符前面的\无特殊含义,只表示字面值。
有时候我们在shell中调用linux命令是为了得到这个命令的返回值,这是应该用一对反引号来调用执行命令。
Shell的选择分支结构
典型的if格式
If[表达式];then
...
Else
...
Fi
If的典型应用
判断文件是否存在。(-f) 注意[]里面前后都有空格,不能省略。
判断目录是否存在。(-d)
判断字符串是否相等。(“str”=“str”)
判断数字是否相等。(-eq 相等)、(大于-gt)、(小于-lt)、(大于等于-ge)、(小于等于-le)
判断字符串是否为空(-z)。
If判断式中使用“-o”表示逻辑或。
逻辑与&&和逻辑或||与if表达式结合。
Sell的循环结构
For循环
for i in 1 2 3 45 6
do
echo $i
done
while循环
i=2
j=11
while [ $i -lt $j ]
do
echo $i
i=$(($i+2))
done
Echo的创建和追加输入文件
在shell中可以直接使用echo指令新建一个文件,并且将一些内容传入这个文件。创建文件并输入内容符号就是>。(echo "123456" > a.c)
还可以使用echo指令配合追加符号>>想一个已经存在的文件末尾追加输入内容。
Echo "8961515" >> a.c
Case语句
Shell中的case语句本身没有break语句。Uboot中有些break在case语句中出现,是因为和while结合了,此时的break用于跳出while循环。
Var=1
case $var in
1) echo "1" ;;
2) echo "2" ;;
Esac
调用shell程序的传参
在shell程序内部传参是使用一些特定的符号来表示的,包括:
$#表示调用该shell时传参是个数。($#计数时只考虑真正的传参个数)
$0、$1、$2、....依次表示传参的各个参数。
shell:source a.sh aa bb cc $# = 3, $0是执行这个shell程序的解析程序的名字,$1是第一个有效参数的值,$2是第2个有效参数的值·····
Makefile
1.Makefile的作用和意义
工程项目中C文件太多管理不方便,所以用makefiel来管理项目,方便编译链接。
2.目标、依赖、命令
目标就是make xxx生成的那个xxx文件,就是我们最终要成的东西。
依赖就是用来加工生产的原材料。
命令就是加工方法。Make xxx的过程就是使用命令将依赖文件加工生成目标
的过程。
3.通配符%
%代码一个或者几个字母,%.o就代表的以.o为结尾的文件。
4.makefile变量的定义和使用
和shell脚本非常相似。(都没有变量类型,直接定义使用,引用变量时$var)
5.伪目标
伪目标就是这个目标本身不代表一个文件,执行这个目标并不是为了得到摸个文件或者东西,而是单纯为了执行这个目标下面的命令。
伪目标一般都没有依赖文件,就是无条件执行。
伪目标可以直接写,不影响使用,但是有时候为了声明这个目标是 伪目标,会在伪目标前添加.PHONY。
6.makefile中引用其他makefile
使用makefie指令
7.makefile 的注释也是用#。
8.命令前面@表示静默执行。
如果只输出执行的内容,就用@静默执行。
9.Makefile几种变量赋值运算
= 最简单的赋值
:= 也是赋值
用=赋值的变量,在被解释时它的值取决于最后一次的赋值
用:= 赋值就是直接解释,前面赋值是什么就是什么。
?= 表示变量前面如果没有被赋值这这行赋值,如果赋值了则忽略本操作。
+= 用来给一个已经赋值的变量连续赋值,就是把后一次赋值的加载原来值的后面(类似strcat)。
10.Makefile的环境变量
makefile中用export导出的就是环境变量。一般情况下要求环境变量名用大写,普通变量名用小写。环境变量和普通变量不同,可以这样理解:环境变量类似于整个工程中所有Makefile之间可以共享的全局变量,而普通变量只是当前本Makefile中使用的局部变量。所以要注意:定义了一个环境变量会影响到工程中别的Makefile文件,因此要小心
11. Makefile的自动变量
自动变量的含义:预定义的特殊意义的符号。
$@ 规则的目标文件名
$< 规则的依赖文件名
$^ 依赖的文件集合
- shell和makefile对比
- shell和Makefile
- makefile和shell脚本
- Shell和Makefile
- Makefile和shell配合使用
- Makefile文件和shell脚本
- Makefile文件和shell脚本
- makefile 和 shell 的不同
- Makefile 和 shell中的环境变量使用
- makefile 和shell文件相互调用
- Makefile和shell脚本的不同
- Makefile和shell脚本的区别
- Makefile----shell函数和make的运行
- shell脚本和Makefile中的特殊变量
- shell脚本和makefile的异同
- makefile 和shell文件相互调用
- 补基础之shell和Makefile
- makefile 和shell文件相互调用
- RSA 常见攻击方法
- Swift项目中手动添加桥接文件
- IMWeb小白十天-Day6-(模仿百度登录框)
- Awesome——字体图标
- DEV ChartControl 图表设计 -- Line
- shell和Makefile
- ARIMA模型简介
- 18LeetCode——4sum
- The Android ADB principle (1) --- ADB enable / disable
- 虚拟机网络设置-各网络模式的区别
- centOS6.5安装coreseek,php+mysql+coreseek调试测试,亲测管用
- Win10下查看系统证书
- Eclipse使用Maven时出现:Index downloads are disabled, search results may be incomplete
- CSS超链接a标签的四种状态属性设置