已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux下的shell与make 一、shell 1.1 什么是shell 用户与Linux的接口 命令解释器 支持多用户 支持复杂的编程语言 Shell有很多种,如:csh,tcsh,pdksh,ash,sash,zsh,bash等。Linux的缺省Shell为bash(Bourne Again Shell)。 Shell是用户和操作系统之间最主要接口。通过Shell,可以同时在后台运行多个应用程序,并且在把需要与用户交互的程序放在前台运行。 通过在多条命令的序列中使用变量和流程控制,Shell可以作为一名复杂的编程语言。 1.2 转义字符和通配字符 转义字符(metacharacters)指的是在Shell中有特殊含义的字符。 例如: | ; ! ? * $ “ ( ) #ls file1-10.c #count=ls l | grep d| wc l 通配字符(wildcards)是转义字符的子集,用来查找匹配文件名 例如:? * - ! 使用键,可以自动补齐。 通配一个字符:“?“ 通配多个字符:“*“ 1.3 输入输出重定向 系统定义三个标准文件:标准输入(stdin)、标准输出(stdout)、标准错误输入(stderr) 管道符:“|“,将前一个命令的输出转成下一个命令的输入。 过滤器(filters):用来接收标准输入,经过一定的转化,再写到标准输出。所以,过滤器一般放在管道符中间。 每个程序起动时,就有三个文件描述:STDIN (0),STDOUT(1),STDERR(2)。用“改变输出,用“2“改变错误输出,用“来追加到已有的文件中。 常用的过滤器如下:expand,sed,awk,fmt,tac,tr,grep,nl,pr。 多条命令可以输入到一行中,并用“;“字符分隔。在一行命令后加“表示另起一行继续输入,下一行的提示符变为“ printf(“t”); 1.4 Shell变量 Shell变量(Variables)是程序用来保存数据用的。 Shell特殊变量:系统定义了一些特殊的变量。如$HOME等。使用set命令查看当时系统中定义的变量。 系统定义的特殊变量有:$TERM(当前终端类型),$PATH(命令的搜索路径),$MANPATH(手册页存放的目录),$HOME(用户主目录),$LANG(当前使用语言),$PS1,$PS2(命令提示符),$SHELL(当前Shell名)。 在命令行上打入:变量名=变量值,可以定义变量。使用 echo $变量名 查看变量值。使用 unset 取消对变量的定义。 #hello=”123” 单引号表示忽略其中所有的转义字符,双引号表示忽略其中除了 $ 以外的其他的转义字符。反斜线()表示忽略下一个转义字符。 多条命令可以输入到一行中,并用“;“字符分隔。在一行命令后加“表示另起一行继续输入,下一行的提示符变为“ Shell系统变量 $?:最近执行的命令返回的值; $:本进程的进程号 $!:最近后台进程号 $#:shell自变量个数,$1表示第一个自变量 Shell用户变量 #varname=value :赋值 #readonly varname :标记只读 #export varname :标记移出:变量可以被子进程继承 #setenv PATH=/home:/usr:/etc:/bin:/usr/bin: (csh中) #varname= expr $varname + 1 :变量值增1 x=$ $x + 1 #echo $PATH 1.5 定制用户环境 用户在登录Shell时,会依次执行一系列的脚本。 使用alias命令,可以定义一些别名。 Alias rm f rm 登录BASH时,用户将依次执行一系列的脚本:/etc/profile , $HOME/.bash_profile ( 如果没有,执行 $HOME/.bash_login ,还没有,执行 $HOME/.profile)。注销时,会自动执行 $HOME/.bash_logout 。 使用 redhat 的用户,登录时除了这两个文件以外,还会自动执行 $HOME/.bashrc ,这个文件又会再执行 /etc/bashrc 1.6 条件控制 1)test命令 测试文件、变量的属性,表达式的值,或命令执行返回值。 test d /usr -d /usr test f .bashrc -f .bashrc test $count gt 0 $count gt 0 2)if语句 if (expression) then command-list else command-list fi 3)case语句 case $var in pattern1) command-list ; pattern2) command-list ; esac 4)逻辑运算符 do case $i in *0) echo “*”file$i ; *) echo $i file$i ; esac i = expr $i + 1 done 例:append命令的实现: case $# in 1) cat $1 ; 2) cat $2 ; *) echo usage: append from to ; esac #chmod +x myappend #myappend file1 file2 1.8函数 functionname( ) command-list usage() echo “usage:$1” usage “from to “ 注意:函数的使用就象可执行程序一样,但必须先定义,后使用。 1.9 here文档 here文档指在shell脚本中指定输入源,而不是来自文件或标准输入,其中的“”是here文档保留字。 # mail cindy !$ happy birthday I love you !$ 1.10 shell内部命令:不产生子进程 1) eval:在shell程序中,利用变量的值来构建命令 A=ls B= | wc -w eval $A$B 2) exec:转去执行exec后命令,不建立新进程,也不返回到当前的执行过程,相当于go to 语句。 #cat execdemo exec date echo hello 3) read:从标准输入设备(键盘)读入一行,并把读入的字依次赋给各变量,所有剩余的字赋给最后一个变量。 #cat parrot echo “you say:c” read what echo “I repeat:$what” 4) shift:使命令行参数向左移动一位,并使记录参数总数的变量$#减1 #cat shiftdemo while test $# != 0 do echo $1 $2 $3 shift done #shiftdemo a b c a b c b c c 5)wait:等待当前进程所有子进程结束,若wait后跟参数n,则等待进程n结束。 #cat waitdemo echo “This is a new file” (sleep 5; date) eval $x; done fi done 7)点命令 . 在bsh利用 . 命令执行一个命令时,不创建子进程。(csh中用source) 8)空命令:不做任何事情 1.11 shell程序实例 下面程序dircmp测试当前目录与指定目录是否含有相同文件数 if test $# -ne 1 then echo “Usage:dircmp dirname” exit 1 else if test !-d $1 then echo “”$1” is not a directory” exit 1 else this = ls l |grep - | wc l that = ls l $1 |grep - | wc l if test $this ne $that then echo “Current directory and ”$1” do not match” else echo “Current directory and ”$1” have same number of files” fi fi fi #dircmp abc “abc” is not a directory 1.12 shell程序的执行方法: 1) $chmod u+x dircmp $./dircmp /usr/bin 2) $sh dircmp 3) $sh dircmp 4) $ . dircmp(用点命令执行程序,不创建子进程) source dircmp(csh中) 二、make 2. 1 make 大型程序维护工具 Makefile 或 makefile: 告诉make维护一个大型程序,该做什么。Makefile说明了组成程序的各模块间的相互关系及更新模块时必须进行的动作,make按照这些说明自动地维护这些模块。 Netdefs.h 头文件 Subrs.c network.c 源文件 编译 Subrs.o network.o 目标文件 连接 Network 可执行文件 在makefile(Makefile)中,自顶向下说明各模块之间的依赖关系及实现方法: network: network.o subrs.o (1) cc o network network.o subrs.o (2) network.o: network.c netdefs.h (3) cc c network.c (4) subrs.o: subrs.c netdefs.h (5) cc c subrs.c (6) 其中(3)(6)可以简化为:(隐含的规则) network.o subrs.o: netdefs.h #make #make network #make f makefile 22 makefile要点 (1) 宏(变量) CC=gcc $(CC) test.c $: current target $:first prerequisite $:all prerequisites (2) 后缀规则(suffix rules) .c.o: $(CC) -c $(CFLAGS) -o $ $ (3) 模式规则(pattern rules) %.o:%.c $(CC) -c $(CFLAGS) -o $ $ (4) 通配符* objects = *.o objects := $(wildcard *.o) objects := $(patsubst %.c,%.o,$(wildcard *.c) foo : $(objects) cc -o foo $(objects) (5) phony targ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年低空经济产业集群合作创新研究报告
- 展期补充协议
- 姐妹赡养老人协议书
- 2026-2031中国光学镜头现状研究及发展趋势预测
- 2026-2031中国罐式汽车市场竞争策略及投资潜力研究预测报告
- 2025年法律法规合规与风险控制工程师职业技能考试试题及答案解析
- 道路旅客运输企业2025应急处理预案演练记录
- 物业项目停水、停电、停气应急预案
- 磷酸铁锂储能电池单元火灾的应急演练脚本
- (2025)垃圾分类知识竞赛题库及参考答案
- 外国近现代雕塑艺术欣赏
- 大学美育(河南财经政法大学)知到智慧树章节测试课后答案2024年秋河南财经政法大学
- 2025大连机场招聘109人高频重点提升(共500题)附带答案详解
- 互联网信息审核员考试题及答案
- 2025年中远海运集团招聘笔试参考题库含答案解析
- 《自身免疫性脑炎》课件
- 2025年高考英语外刊时文阅读训练专题25褪黑素在REM睡眠中的作用(学生版+解析)
- 品管圈PDCA案例-中医医院减少住院患者艾灸烫伤率医院改善成果汇报
- 快递突发事件应急预案(3篇)
- 光明乳业供应链管理
- 基于“双减”背景下的小学语文作业设计探究
评论
0/150
提交评论