一、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可用于查看文件是否存在,可以进行数值、字符、文件三方面的判断。
逻辑与:&&
逻辑或: ||



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"