linux与c的学习(2018.11.11)

工程管理器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

linux与c的学习(2018.11.11)_第1张图片

比较整数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、取值

右大括号 } 有返回值的功能。

你可能感兴趣的:(linux,c)