Linux基础--挣点元子(1)

一、vim

三种模式:指令模式,编辑模式、底部命令行模式

常见命令:

dd:删除 如:3dd删除光标以下2行

u:撤销 如:3u,回退三步

yy:复制 如3yy,复制光标及以下2行

p:粘贴到光标下一行

P:粘贴到光标上一行

保存: :w

退出: :q

保存退出: :x 或:wq

不保存退出: :q!

二、Linux下编程C语言

uname指令:显示当前系统信息

1、编写C语言

cpp 复制代码
#include<stdio.h>

int main()
{
	printf("hello world");
	return 0;
}

2、编译C语言

使用gcc编译器编译C语言

-c :只编译不链接,会生成.o文件,gcc hello.c -c

-o:gcc hello.c -o hello 生成可执行文件 ,./hello即可执行该文件

-v:打印编译的详细过程

-O:优化编译

-O2:优化编译,优化力度大于-O

3、Make工具Makefile文件

3.1、Make工具

Make工具也叫GUN Make,可以自动化完成的编译工作,主要工作内容:

·如果修改了某几个源文件,则只重新编译这几个源文件

·如果头文件被修改,则重新编译所有包含该头文件的源文件

当项目中由很多源文件时,如果只修改了一个源文件,使用gcc编译所有的源文件耗时,如果只编译一个被修改的源文件gcc -c ***.c ,则需要将所有的.o文件链接起来;gcc -o main mian.o ***.o xxx.o ,非常的麻烦,于是就衍生了makefile。

3.2、Makefile语法

Makefile中命令的每一行开始,都必须使用tab,不能使用空格!

终极目标的规则,需要放在第一行

3.2.1 Makefile格式规则

目标***:依赖文件集合....

命令1

命令2

....

cpp 复制代码
main:main.o input.o calcu.o   //目标文件main:依赖于各种.o文件
	gcc -o main main.o input.o calcu.o //目标文件main生成的命令

main.o:main.c //目标文件main.o:依赖main.c
	gcc -c main.c //通过此命令编译.c生成.o
input.o:input.c
	gcc -c input.c
calcu.o:calcu.c
	gcc -c calcu.c

clean:  //执行make clean 可执行以下文件
	rm *.o
	rm main

make工具只会编译被修改的过源文件,其他未修改的文件,不会编译!

3.2.2、Makfile变量

Makefile只有一种变量:字符串

变量的引用方法:() 如(obj)

变量复制使用 = ,如obj = main.o input.o calcu.o

cpp 复制代码
//Makefile变量
obj = main.o input.o calcu.o

main:$(obj)  
	gcc -o main $(obj) 
赋值符号=

当使用=对变量赋值时,变量的值会等于最后一次赋值,也就是赋值后置

cpp 复制代码
num = 100
cur_num = $(num)
num = 0

print:
	@echo cur_num : $(cur_num) // 输出cur_num : 0,=在makefile中会让赋值后置
赋值符号 :=

当使用:= 对变量赋值时,变量会等于当前赋值的值,不会赋值后置

cpp 复制代码
num = 100
cur_num := $(num)
num = 0

print:
	@echo cur_num : $(cur_num) // 输出cur_num : 100,:=在makefile不会让赋值后置
赋值符号?=

会先确认该变量是否被赋值,如果没有赋值,则赋当前值,否则维持初始值

cpp 复制代码
name ?= yyk // 最终name会等于yyk

name ?= zs  //因为name已被赋值,所以name不会编程zs,依旧时yyk
追加赋值符号+=

追加赋值

cpp 复制代码
obj = main.o input.o
obj += calcu.o // 追加赋值calcu.o
3.2.3、Makefile模式规则 & 3.2.4、自动化变量

常见的自动化变量:

\^:依赖文件集合的所有文件用^表示

\<:依赖文件集合中的第一个文件用<表示,

@:目标文件集合用@表示

cpp 复制代码
main.o:main.c 
	gcc -c main.c 
input.o:input.c
	gcc -c input.c
calcu.o:calcu.c
	gcc -c calcu.c

//以上这种方式,太过繁琐,可以使用模式规则,采用通配符来简化

%.o:%.c   //通配符%,意为将所有的.c文件编译成.o文件,:前为目标文件集合,:后为依赖文件集合
    gcc -c $< 
//依赖文件集合的所有文件用$^表示
//依赖文件集合中的第一个文件用$<表示,
//目标文件集合用#@表示
3.2.5、Makefile伪目标

Makefile中一种特殊目标,目的是不需要生成目标,只需要执行目标下的这些命令;

解决的问题是:为了防止目标与现有文件名一直,导致执行make指令时,目标一直为新的导致无法执行,就需要采用伪目标

cpp 复制代码
//此为目标,,如果当前目录下存在clean这个文件,执行make clean则无法执行rm删除指令
clean:
    rm *.o
    rm main

//此为伪目标,可在当前目录下存在clean文件时,执行make clean保证rm指令正常执行
.PHONY:clean
clean:
    rm *.o
    rm main
3.2.6、Makefile的条件判断

关键字:ifeq,ifneq,ifdef,ifndef

3.2.7、Makefile函数使用

(函数名 参数集合) 或者 {函数名 参数集合}

Makefile支持的函数:Makefile函数详解 - 通辽节度使 - 博客园

三、shell脚本入门

1、shell脚本写法

bash 复制代码
#!/bin/bash //必须已此开头的.sh文件
    echo hello world!
bash 复制代码
#!/bin/bash
echo this is my first bash boot

执行:./my.sh 会在控制台打印 this is my first bash boot

2、交互式shell脚本

read 命令

bash 复制代码
  1 #!/bin/bash
  2 echo "pleas input your nane:"
  3 read name  //name是变量
  4 echo "your name is: $name"  //打印变量使用$变量名

常用选项:

  • -p 提示信息 在读取前显示提示文字,简化 echo + read 的写法。

    bash 复制代码
    #!/bin/bash
    read -p "请输入网站名: " site
    echo "你输入的是 $site"
  • -t 限时输入(秒) 超时未输入返回非零状态。

  • -n 限制字符数 达到指定字符数自动结束,无需回车。

  • -s 静默模式(隐藏输入) 常用于密码输入。

  • -a 存入数组 按空格分隔,将输入赋值到数组元素中。

3、shell脚本进行整型计算

shell脚本支持整型数据

表达式:$((表达式))

bash 复制代码
#!/bin/bash
echo "请输出两个变量:" 
read num1 num2
sum=$(($num1 + $num2))
echo "$num1 + $num2 = $sum"

4、test命令

test可用于查看文件是否存在,可以进行数值、字符、文件三方面的判断。

逻辑与:&&

逻辑或: ||

Shell test 命令 | 菜鸟教程

5、中括号[]判断符

如4,[]变量必须加"",

6、默认变量

0\~n,表示shell脚本的参数,包括shell脚本命令本身,shell脚本命令本身为$0,

#:表示最除0外的参数个数

@:表示除0意外的所有参数

7、shell脚本条件判断

方式1:

if 条件判断; then

指令

fi

方式2:

if 条件判断1;then

else

指令

fi

方式3

if 条件判断1;then

指令1

elif 条件判断2;then

指令2

else

指令3

fi

8、case语句

bash 复制代码
case $变量 in
    "变量1") //条件1
        程序
    ;;
    "变量2") //条件2
        程序
    ;;
    *) //default,都不满足时,走这条语句,*为通配符
        程序
    ;;
esac

9、shell函数

格式

bash 复制代码
funcation fun1(){
    程序;
}

传参 和调用

bash 复制代码
#!/bin/bash
print(){
    echo "第一个参数:$1"
    echo "第二个参数:$2"
}

//传参
print a b

调用:直接fun1,不需要加()

10、shell 循环

bash 复制代码
while[条件]
do
    程序
done
bash 复制代码
util[条件]
do
    程序
done
bash 复制代码
for 变量 in 条件1 条件2 ... 条件n
do
    程序
done

#!/bin/bash
sum=0
for n in 1 2 3 4 5 6; do
   ((sum += n))
done
echo "总和为:$sum"
bash 复制代码
#!/bin/bash
sum=0
for ((i=1; i<=100; i++)); do
   ((sum += i))
done
echo "总和为:$sum"
相关推荐
身如柳絮随风扬2 小时前
Nginx 入门教程:从安装到配置反向代理与负载均衡
运维·nginx·负载均衡
Elon ¿2 小时前
银河麒麟Server V10 部署NFS服务器及Windows客户端连接
运维·服务器
positive_zpc2 小时前
计算机网络——应用层
服务器·网络·计算机网络
小夏子_riotous2 小时前
Docker学习路径——7、Docker搭建MySQL 主从复制
linux·运维·mysql·docker·容器·centos·云计算
liyinchi19882 小时前
Windows Server 部署Docker Engine
运维·docker·容器
万岳科技系统开发2 小时前
私域直播系统直播间高并发访问的负载均衡方案
运维·负载均衡
MinterFusion2 小时前
如果openKylin 2.0 SP2主机的IPv4地址改变,如何让GitLab正常运行
运维·gitlab·系统配置·系统维护·明德融创
郝开2 小时前
Docker Compose 本地环境搭建:.env 统一配置模板
运维·docker·容器
IMPYLH2 小时前
Linux 的 sleep 命令
linux·运维·服务器·bash