Shell中的函数(先调用后使用的原则)(没有申明)
(Function) 函数名(有没有参数根据调用格式)(不能写任何内容)
{
函数体
Return 返回值
}
函数名 ----》调用没有参数的函数
函数名 实参1 实参2 实参3 ------- 空格作为分割
函数参数的获取
通过位置变量的方式获取
${n}
只能从$1开始获取 $0永远为脚本名
使用位置变量 ,在寒素内部使用位置变量,只能获取函数的外部参数
在脚本使用位置变量。只能获取脚本的外部参数
只要在实现函数时写了return 函数就有返回值函数
$?接收上一条指令的返回值
Shell中只能返回0-255 超过255会取余
修饰变量的关键字
Readonly :只读不能修改
Local:定义局部变量,只能在函数内使用(shell中所有的变量默认都是全局)
分文件编译
将主函数 功能函数的定义 功能的申明博爱阔头文件分成三个文件
主函数 main.c
功能函数 fun.c
函数申明和头文件 fun.h
需要联合编译 主函数和函数定义需要联合编译 gcc main fun 默认生成a.out
.h文件不能写到gcc 后面
Makefile
是一个工程管理文件,可以完成程序的自动化编译
需要make工具 对makefile文件进行处理
Make是gnu的产品 gpl(开放源)
Sudo apt-get install make
为什么学makefile
当分布编译时,如果一个c文件发生修改 则所有的c文件都需要重新编译再生成可执行的文件
使用makefile后 可以只对修改的文件重新编译,简化编译的过程
Makefile的书写
类似于shell脚本
Makefile由规则 变量函数组成
- 规则
- 目标:依赖
- <tab建>指令
Make工具
Make工具是用来读取makefile文件的
直接在终端输入make makefile
Make 有两个默认的读入文件 makefile makefile 如果两个文件同时存在 make 会读入小的makefile 可以使用make -f makefile 指定读入 makefile
Gcc分布编译
预处理 编译汇编 链接
Gcc -E xxx.c -o xxx.i
删除注释 替换宏定义 展开头文件 不检查语法错误
gcc -S xxx.i -o xxx.s
检查语法错误 生成汇编文件
Gcc -c xxx.s -o xxx.o
生成二进制文件
Gcc xxx.o -o a.out 链接到程序需要的库,生成可执行文件
Makefile 把文件的编译过程分为两部
生成二进制文件 -c .o文件
链接库生成可执行文件
将编译过程分为两部
第一步 生成.o后缀的二进制文件
第二步 链接库,生成可执行的文件
节约编译时间
保证每个.c文件都有一个已经完成大部分编译过程.o文件生成
Makefile 中的规则
规则的构成:
目标:依赖
《tab》 语句 -------- 一定是tab
每一条规则都必须有一个目标
一个目标可以有多个依赖
一个目标也可以没有依赖 只执行语句
Makefile中的变量
+= 追加赋值 加空格把其他变量的值加在后面
= 递归赋值 取最后一次赋值的结果
?= 条件赋值 如果变量前面没有赋值过就赋值 赋值过就不赋值
:=立即赋值
第二版makefile
EXE=fun
OBJs+=main.o
OBJs+=fun.o
CC=gcc
CFLAGs=-c
#!/bin/bash
function fun()
{
id -u
id -g
}
fun