目录
shell命令
数组
数组的赋值
数组的调用
遍历数组
函数
函数的定义方式
函数调用
分文件编程
源文件
头文件
include引用时“”和<>的区别
编译工具
gcc编译工具
gdb调试
make工具
定义
Makefile格式
Makefile管理多个文件
Makefile变量
自定义变量
预定义变量
自动变量
Makefile四种方式总结
第一种
第二种
第三种
第四种
shell命令
数组
数组的赋值
1.array=(1 2 3 4 5)
2.array=($1 $2 $3 $4) 命令行传参
3.read a b c
array=($a $b $c)
4.read -a array 终端输入数据到数组中
数组的调用
${array[i]} 数组下标0~n-1,通过下标获取数组元素
array[i]=100 对数组元素重新赋值
${array[@]} 遍历数组
${#array[@]} 计算数组元素的个数
遍历数组
1.echo ${array[@]}
2.for ((i=0;i < ${#array[@]};i++}
do
echo -n ${array[i]}
done
函数
函数的定义方式
1.函数名()
{表达式
}
2.function 函数名()
{表达式
}
函数调用
函数名 参数列表
#!/bin/bash
fun()
{
echo "请输入两个数字:"
}
fun
read NUM1 NUM2
fun1()
{
NUM=`expr $1 + $2`
echo "两数之和为:" $NUM
}
fun1 $NUM1 $NUM2
函数内$1 $2表示的是传递的参数
分文件编程
源文件
.c结尾的文件
包含main函数的.c
包含子函数的.c
头文件
.h结尾文件
头文件、宏定义、typedef 、结构体、共用体、枚举、函数声明
include引用时“”和<>的区别
<>去系统目录查找头文件
“”先从当前目录下查找,如果没有再去系统目录查找头文件。
系统默认搜索路径
/usr/include
/usr/local/include
追源码:
ctrl 单击
返回:
ctrl alt -
编译工具
gcc编译工具
预处理:#开头内容,展开头文件、替换宏定义、删除无用注释,不会检查语法错误
gcc -E xx.c -o xx.i
编译:检查语法错误,有错就报错,无错就继续生成汇编文件
gcc -S xx.i -o xx.s
汇编: 将汇编文件生成不可执行的二进制文件
gcc -c xx.s -o xx.o
链接: 链接库文件,生成可执行的二进制文件
gcc xx.o -o xx
gdb调试
gcc -g xx.c
gdb a.out
r 运行代码
l 查看文件
b 行号或者函数名:添加断点
info b 查看断点情况
d num(断点编号) 删除断点
p 变量名 查看变量的值
s/n 单步运行,s会进入子函数顺序执行;单步跳过,n不会进入子函数
c 执行到下一个断点的位置
help 帮助
q 退出
步骤:代码写好后,先通过gcc -g进行编译代码,没有错误后,可以通过gdb a.out进行调试,输入l查看文件内容,通过b设置断点,输入r进行运行,n或s进行单步调试,q退出
make工具
定义
make工程管理器就是一个“自动编译管理器”这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作。Makefile或makefile是make读取的唯一配置文件
Makefile格式
目标:依赖
命令
注意:命令前敲TAB
gcc编译步骤中,可以按照如下步骤的逆序写Makefile文件
gcc -c xx.c -o xx.o 目标:xx.o 依赖:xx.c
gcc xx.o -o xx 目标:xx 依赖:xx.o
test:test.o
gcc test.o -o test
test.o:test.c
gcc -c test.c -o test.o
使用make进行编译
Makefile管理多个文件
1.创建多个文件
2.写一个Makefile文件
具体的见文档末尾的四种总结Makefile文件
Makefile变量
自定义变量
一般大写,取变量的值$(变量名)
= 按递归方式展开
:= 直接赋值 (当前的值是什么就立即赋值)
+= 追加新的值
?=判断之前是否定义,如果定义了,就不重新赋值;否则赋值
预定义变量
系统预先定义好的一些变量,可能有默认值可能没有默认
RM 文件删除程序的名称,默认值为rm -f
CC C编译器的名称,默认值为cc。
CPP C预编译器的名称,默认值为$(CC) –E。
CFLAGS C编译器的选项,无默认值。
OBJS 生成的二进制文件或目标文件,自己定义
自动变量
$< 第一个依赖的名称
$@ 目标文件的完整名称
$^ 所有不重复的依赖的名称所有:%
Makefile四种方式总结
第一种
test:main.o add.o
gcc main.o add.o -o test
main.o:main.c
gcc -c main.c -o main.o
add.o:add.c
gcc -c add.c -o add.o
.PHONY:clean
clean:
$(RM) *.o test
第二种
CC=gcc
CFLAGS=-c -g -Wall
OBJS=main.o add.o
test:$(OBJS)
$(CC) $(OBJS) -o test
main.o:main.c
$(CC) $(CFLAGS) main.c -o main.o
add.o:add.c
$(CC) $(CFLAGS) add.c -o add.o
.PHONY:clean
clean:
$(RM) *.o test
第三种
CC=gcc
CFLAGS=-c -g -Wall
OBJS=main.o add.o
test:$(OBJS)
$(CC) $^ -o $@
main.o:main.c
$(CC) $(CFLAGS) $< -o $@
add.o:add.c
$(CC) $(CFLAGS) $< -o $@
.PHONY:clean
clean:
$(RM) *.o test
第四种
CC=gcc
CFLAGS=-c -g -Wall
OBJS=main.o add.o
test:$(OBJS)
$(CC) $^ -o $@
%.o:%.c
$(CC) $(CFLAGS) $< -o $@
.PHONY:clean
clean:
$(RM) *.o test