跟我一起学linux基础(第五天)

第五天
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文件















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值