工程管理器make(续)
伪目标【没有依赖,只有执行动作】
.PHONY:clean //声明伪目标
clean:
rm -f hello main.o func1.o func2.o
执行伪目标: make clean
不取名为makefile的执行方式:
make -f 文件名 //执行
多文件编译:
obj = main.o fun1.o fun2.o fun3.o //obj为自定义
hello:$(obj) //$:取信息
gcc $(obj) -o hello
系统默认的自动化变量
$^:代表所有的依赖文件
$@:代表目标
$<:代表第一个依赖文件
eg:
hello:main.o fun1.o fun2.o
gcc main.o fun1.o fun2.o -o hello
可等效为:
hello:main.o fun1.o fun2.o
gcc $^ -o $@
@:取消回显
#:在makefile中#后面接注释
hello: hello.c
@gcc hello.c -o hello
SHELL脚本
Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。
Shell来启动、挂起、停止甚至是编写一些程序。
程序:
vim xxx //创建shell脚本文件
程序必须以下面的行开始(必须方在文件的第一行):
#!/bin/sh
#!用来告诉系统它后面的参数是用来执行该文件的程序。
要使脚本可执行:
chmod +x filename
然后,可以通过输入: ./filename 来执行脚本
变量名=值
取出变量值可以加一个美元符号($)在变量前面
变量赋值时,“=”两边都不能有空格
BASH中的语句结尾不需要分号
eg:
#!/bin/sh
#对变量赋值:
a="hello world"
# 现在打印变量a的内容:
echo "A is:"
echo $a
//之后执行chmod +x HelloWorld
最后输入./ HelloWorld执行该脚本。
这个脚本将会输出:
A is:
hello world
echo “this is the $numnd”
不会打印出“this is the 2nd”,而仅仅打印“this is the”,因为shell会去搜索numnd变量的值,但这个变量是没有值的。可以使用{}来告诉shell我们要打印的是num变量:
echo “this is the ${num}nd”
这将打印: “this is the 2nd”
默认变量
$#:传入脚本的命令行参数个数
$*:所有命令行参数值,在各个参数值间留有空格
$0:命令本身(shell文件名)
$1:第一个命令行参数
$2:第二个命令行参数
局部变量
在变量首次被复制时加上local关键字可以什么一个局部变量
IF语句
If [expression]
then
#code block
fi
If [expression]
then
#code block
else
#code block
fi
eg:
If [expression]
then
#code block
else if [expression]
then
#code block
else
#code block
fi
fi
比较整数a和整数b是否相等:if[ $a = $b ]
比较整数a是否大于整数b:if[ $a –gt $b ]
比较字符串a和b是否相等: if[ $a = $b ]
判断字符串a是否为空:if[ -z $a ]
比较整数变量a是否大于b:if[ $a –gt $b ]
注意:1、在“[”和“]”两边都留有空格
2、在“=”两边也都有空格
-e 文件已存在
-f 文件是普通文件
-s 文件大小不为零
-d 文件是一个目录
-r 文件对当前用户可以读取
-w 文件对当前用户可以写入
-x 文件对当前用户可以执行
for循环
for var in [list]
do
#code block
done
While循环
while [condition]
do
#code block
done
until循环
until [condition]
do
#code block
done
while和until的区别在于while为真时执行,until为假时执行;
case语句
BASH语句中的case和c语言中的类似可以用于进行多项分支控制:
case “$var” in
contidion1)
;;
contidion1)
;;
*)
default statements;;
esac
C
程序:数据结构+算法
int的长度根据CPU的字长来决定的,int可变,在16位的机子上是2个字节,在32位上是4个字节
long int 字节数不变,是4个字节(32位)
int在内存中以补码方式存放。
补码:
正数:补码原码一样
负数:原码–>补码的方法:符号位不变【最左边的第一位】,其他按位取反 然后+1
[]是下标运算符:
1、计算偏移地址
2、取值
右大括号 } 有返回值的功能。