第五天
linux基础今天就结束了,往后我们学数据结构,希望读者继续跟读
脚本:
脚本本质:一系列有序命令的集合
执行依赖于命令行解释器
xxx.sh
执行方法:
1、bash xxx.sh
2、chmod 777 xxx.sh
./xxx.sh
3、source xxx.sh
4、. ./sh
变量使用:一门语言的语法
自定义
abc="hello world"
echo "$abc" <==> echo "${abc}"
value=123
info=`ls`
环境
PATH HOME
位置
$0
$1 ... $9 ... ${n}
$#
$?
read var
value=`expr $var \* 10`
test 可以检测字符串 整数 文件属性
test "$string" = "hello"
[ "$string" = "hello" ]
test -z "$string"
value=100
-eq -ne -gt -ge -lt -le
test $value -ge 100
test -e $fname
if test语句
then
else if test语句
then
else
fi
fi
case 变量的引用 in
模式1 | )
命令
;;
*)
命令
;;
esac
for var in $string
do
done
break 2
continue 2
for 执行100次 第30次
do
for 执行5次
do
假设第三次过程中使用了continue 2
.........
done
done
char str[100];
gets(str);//读取字符串,假设12345
char *s = str;
int value = 0;
while(*s != '\0')
{
value = value * 10 + *s - '0';
s ++;
}
脚本的while循环
while test语句或者命令
do
done
shell函数
函数定义:
有两种格式:
function 函数名()
{
}
脚本函数的返回值如果要写内容,只能是function关键字
函数名()
{
}
函数调用:
函数的调用方式要看函数是否有返回值。
1、直接调用函数名 注意函数名后面没有(),这种方式适用于任何一种定义方式
2、变量=`函数名` 没有返回值时使用
没有虽然实参和形参概念,但是可以传参。调用函数时,在函数名后面传参,这些参数被函数定义内部的$1 .... $(n)接收
没有函数指针
脚本函数可以有返回值,也可以没有返回值。
函数内部定义变量默认是全局变量
局部变量的定义需要在变量名字前加local
Makefile
linux操作系统中为什么使用Makefile?用来编译大型源码
Makefile在编译时可以根据时间戳来编译事先修改过的源文件。
Makefile文件的命名方式:makefile GNUmakefile Makefile 在一个目录下只能使用其中一个,如果3个文件都存在,
使用顺序为GNUmakefile makefile Makefile。
默认执行方式为:make
xxx.mk xxx.Linux xxx.AIX xxx.modpost 在一个目录下可以出现多个makefile
默认执行方式为:make -f xxx.后缀
语法:显示规则、隐式规则、变量使用方法、条件语句、函数
1、显示规则:
目标文件:依赖文件
生成目标文件的命令
test:test.o main.o
5 gcc test.o main.o -o test 命令执行必须以TAB开头,但是还必须要依赖于一个目标或者伪目标
6
7 test.o:test.c
8 gcc -c test.c -o test.o
9
10 main.o:main.c
11 gcc -c main.c -o main.o
12
13 #伪目标文件没有依赖
14 .PHONY:clean
15 clean:
16 rm *.o test
正常情况下:伪目标文件可以出现在Makefile文件的尾部或者中间位置,这样使用时需要执行:make 伪目标
如果伪目标出现在了Makefile文件的开头或者是出现在了所有目标文件的前面,这时如果只执行make命令,
那么默认会执行伪目标下面的规则。
根据实际的需求来使用伪目标。
为什么会有隐式规则:本质原因是make工程管理器有反向推导功能
隐式规则中:最终的目标和最终目标对应的依赖文件以及命令都不能省略,生成中间文件的目标、依赖、命令都可以省略
变量使用:
变量名 = 内容 注意: = 不能省略,=左右可以有空格,内容中有空格不需要加""
引用变量方法:$(变量名) 或者 ${变量名}
变量 += 内容。 在变量的原有基础上新增内容
A ?= B 作用是如果A事先有内容,则当前不成立。入股事先没有内容则B会赋值给变量A
特殊变量:$^代表的是所有的依赖文件
$@代表的是所有的目标文件
一定要注意:这些特殊变量只用于命令中
$<只替代第一个依赖文件
条件语句:
ifeq ($(A),$(B)) 判断变量A和B内容是否完全一致
else
endif
ifneq ($(A),$(B)) 判断变量A和B内容是否不一致
else
endif
ifdef 变量 这里的变量不是引用变量,ifdef的作用是判断变量是否有内容。
else
endif
ifndef 变量
else
endif
函数规则:
$(函数名称 参数1,参数2,...,参数n) 或者 ${函数名称 参数1,参数2,...,参数n}
总控Makefile:可以引用其他目录下的Makefile文件
脚本本质:一系列有序命令的集合
执行依赖于命令行解释器
xxx.sh
执行方法:
1、bash xxx.sh
2、chmod 777 xxx.sh
./xxx.sh
3、source xxx.sh
4、. ./sh
变量使用:一门语言的语法
自定义
abc="hello world"
echo "$abc" <==> echo "${abc}"
value=123
info=`ls`
环境
PATH HOME
位置
$0
$1 ... $9 ... ${n}
$#
$?
read var
value=`expr $var \* 10`
test 可以检测字符串 整数 文件属性
test "$string" = "hello"
[ "$string" = "hello" ]
test -z "$string"
value=100
-eq -ne -gt -ge -lt -le
test $value -ge 100
test -e $fname
if test语句
then
else if test语句
then
else
fi
fi
case 变量的引用 in
模式1 | )
命令
;;
*)
命令
;;
esac
for var in $string
do
done
break 2
continue 2
for 执行100次 第30次
do
for 执行5次
do
假设第三次过程中使用了continue 2
.........
done
done
char str[100];
gets(str);//读取字符串,假设12345
char *s = str;
int value = 0;
while(*s != '\0')
{
value = value * 10 + *s - '0';
s ++;
}
脚本的while循环
while test语句或者命令
do
done
shell函数
函数定义:
有两种格式:
function 函数名()
{
}
脚本函数的返回值如果要写内容,只能是function关键字
函数名()
{
}
函数调用:
函数的调用方式要看函数是否有返回值。
1、直接调用函数名 注意函数名后面没有(),这种方式适用于任何一种定义方式
2、变量=`函数名` 没有返回值时使用
没有虽然实参和形参概念,但是可以传参。调用函数时,在函数名后面传参,这些参数被函数定义内部的$1 .... $(n)接收
没有函数指针
脚本函数可以有返回值,也可以没有返回值。
函数内部定义变量默认是全局变量
局部变量的定义需要在变量名字前加local
Makefile
linux操作系统中为什么使用Makefile?用来编译大型源码
Makefile在编译时可以根据时间戳来编译事先修改过的源文件。
Makefile文件的命名方式:makefile GNUmakefile Makefile 在一个目录下只能使用其中一个,如果3个文件都存在,
使用顺序为GNUmakefile makefile Makefile。
默认执行方式为:make
xxx.mk xxx.Linux xxx.AIX xxx.modpost 在一个目录下可以出现多个makefile
默认执行方式为:make -f xxx.后缀
语法:显示规则、隐式规则、变量使用方法、条件语句、函数
1、显示规则:
目标文件:依赖文件
生成目标文件的命令
test:test.o main.o
5 gcc test.o main.o -o test 命令执行必须以TAB开头,但是还必须要依赖于一个目标或者伪目标
6
7 test.o:test.c
8 gcc -c test.c -o test.o
9
10 main.o:main.c
11 gcc -c main.c -o main.o
12
13 #伪目标文件没有依赖
14 .PHONY:clean
15 clean:
16 rm *.o test
正常情况下:伪目标文件可以出现在Makefile文件的尾部或者中间位置,这样使用时需要执行:make 伪目标
如果伪目标出现在了Makefile文件的开头或者是出现在了所有目标文件的前面,这时如果只执行make命令,
那么默认会执行伪目标下面的规则。
根据实际的需求来使用伪目标。
为什么会有隐式规则:本质原因是make工程管理器有反向推导功能
隐式规则中:最终的目标和最终目标对应的依赖文件以及命令都不能省略,生成中间文件的目标、依赖、命令都可以省略
变量使用:
变量名 = 内容 注意: = 不能省略,=左右可以有空格,内容中有空格不需要加""
引用变量方法:$(变量名) 或者 ${变量名}
变量 += 内容。 在变量的原有基础上新增内容
A ?= B 作用是如果A事先有内容,则当前不成立。入股事先没有内容则B会赋值给变量A
特殊变量:$^代表的是所有的依赖文件
$@代表的是所有的目标文件
一定要注意:这些特殊变量只用于命令中
$<只替代第一个依赖文件
条件语句:
ifeq ($(A),$(B)) 判断变量A和B内容是否完全一致
else
endif
ifneq ($(A),$(B)) 判断变量A和B内容是否不一致
else
endif
ifdef 变量 这里的变量不是引用变量,ifdef的作用是判断变量是否有内容。
else
endif
ifndef 变量
else
endif
函数规则:
$(函数名称 参数1,参数2,...,参数n) 或者 ${函数名称 参数1,参数2,...,参数n}
总控Makefile:可以引用其他目录下的Makefile文件