当前位置: 首页 > article >正文

嵌入式学习--LinuxDay04

嵌入式学习--LinuxDay04

shell脚本

1.1数组

1.1.1数组的赋值

1.1.2数组的调用

1.2函数

1.2.1函数的定义方式

1.2.2函数的调用

2.分文件编程

2.1源文件

2.2头文件

3.编译工具

3.1 gcc编译工具

3.2 gdb调试

4.make工具

4.1定义

4.2Makefile格式

4.3Makefile管理多个文件

4.4Makefile变量

4.4.1自定义变量

4.4.2预定义变量

4.4.3自动变量

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自动变量

$< 第一个依赖名称

$@ 目标文件完整名称

$^ 所有依赖名称

最终


http://www.kler.cn/a/325312.html

相关文章:

  • 创建vue3项目步骤
  • Android Osmdroid + 天地图 (一)
  • vue3 如何调用第三方npm包内部的 pinia 状态管理库方法
  • w039基于Web足球青训俱乐部管理后台系统开发
  • AI大模型如何重塑软件开发流程:智能化与自动化的新时代
  • 【Node.js】使用 Node.js 需要了解多少 JavaScript?
  • 设计模式之模版方法模式
  • 低代码可视化-uniapp蓝牙标签打印-代码生成器
  • 天龙八部怀旧单机微改人面桃花+安装教程+GM工具+虚拟机一键端
  • @overload实际并无作用
  • C# 调用虚拟打印,尝试隐藏进度窗体
  • AfuseKt1.3.6-10110功能强大的安卓网络视频播放器,支持多种在线存储和媒体管理平台!
  • The First项目报告:解读跨链互操作性平台Wormhole
  • 点餐小程序实战教程13餐桌管理
  • 雷池 WAF 如何配置才能正确获取到源 IP
  • GAMES101(作业8)
  • MySQL 加字段锁表怎么解决??
  • 情感短视频素材上哪里找?推荐几个热门情感视频素材资源网站
  • CEPH的写入流程
  • @JsonFormat与@DateTimeFormat的区别
  • 智能监控,守护绿色能源:EasyCVR在电站视频监控中心的一站式解决方案
  • PostgreSQL数据库与PostGIS在Windows中的部署与运行
  • 25基于python的文本冒险岛游戏(源码+游戏简介+python代码学习攻略)校园招聘面试
  • 解决错误:Failed to add the host to the list of known hosts
  • node节点使用:
  • windows下tp5创建定时任务