嵌入式学习--LinuxDay04

shell脚本

1.1数组

1.1.1数组的赋值

1array=(1 2 3 4 5)

  1. array=($1 $2 $3 $4 $5) 命令行传参

3) read a b c

array=($a $b $c)

4)read -a array 终端输入数据数组

1.1.2数组的调用

array[i] 获取下标i变量i范围0~n-1

${array[i]} 通过下标获取元素

array[i]=200 数组元素重新赋值

${array[@]} 数组的所有元素

${#array[@]} 数组所有元素的个数

遍历数组

  1. echo ${array[@]}
  2. for ((i=0;i<${#array[@]};i++))

do

echo -n ${array[i]}

done

练习:用shell脚本实现冒泡排序

1.2函数

1.2.1函数定义方式

1function_name ()

{

命令表

}

2

function function_name ()

{

命令表

}

1.2.2函数调用

函数名 参数列表

#!/bin/bash
fun()
{
    echo "hello"
}

function fun1()
{
    NUM=`expr $1 + $2`
    echo $NUM
}

fun
fun1 1 2

函数内$1 $2表示的是传递的参数

2.分文件编程

2.1源文件

main.c //存放main函数

fun.c //存放其他功能函数

2.2头文件

包含头文件宏定义函数声明结构体共用体枚举typedef

例如

编译:gcc main.c fun.c

执行:./a.out

#include引用时“ ”与<>的区别:

< > :系统默认搜索路径下查找头文件

" " :当前目录查找找不到系统默认搜索路径下查找头文件

系统默认搜索路径?

/usr/include

/usr/local/include

源码ctrl

退回ctrl alt -

3.编译工具

3.1 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

gcc xx.c -o xx -->直接生成可执行文件

gcc xx.c --->a.out

3.2 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退出

4.make工具

4.1定义

make:工程管理器

make工程管理器就是一个“自动编译管理器”这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作。

Makefile makefile 读取唯一配置文件

gcc hello.c fun.c ---->a.out

gcc -c hello.c -o hello.o

gcc -c fun.c -o fun.o

gcc xx.o -o xx

4.2Makefile格式

目标依赖

命令

注意:命令前必须TAB

gcc编译步骤可以按照如下步骤逆序Makefile文件

gcc -c xx.c -o xx.o 目标xx.o 依赖xx.c

gcc xx.o -o xx 目标xx 依赖xx.o

例如写一个test.c文件写一个Makeflie文件编译

使用make进行编译生成相应可执行文件

4.3Makefile管理多个文件

首先创建多个文件

:

写一个Makefile文件

4.4Makefile变量

4.4.1自定义变量

自定义变量一般大写,取变量$(变量名)

= 递归赋值按照递归方式展开

:= 直接赋值(当前为多少就固定是多少)

+= 追加赋值

?= 判断之前是否定义如果定义不再赋值否则重新赋值

4.4.2预定义变量

系统预先定义好的一些变量,可能有默认值可能没有默认

RM 文件删除程序的名称,默认值为rm -f

CC C编译器的名称,默认值为cc。

CPP C预编译器的名称,默认值为$(CC) –E。

CFLAGS C编译器的选项,无默认值。

OBJS 生成的二进制文件或目标文件,自己定义

4.4.3自动变量

$< 第一个依赖名称

$@ 目标文件完整名称

$^ 所有依赖名称

最终

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值