命令解释器的设计本说科毕业论文.doc
《命令解释器的设计本说科毕业论文.doc》由会员分享,可在线阅读,更多相关《命令解释器的设计本说科毕业论文.doc(29页珍藏版)》请在三一办公上搜索。
1、目 录摘 要1前言21 绪论31.1 Shell的定义31.1.1 UNIX Shell31.2 shell的历史41.3 shell的职责42开发环境和开发工具介绍62.1开发环境-Ubuntu62.2开发工具-GCC63 模拟shell设计73.1简单shell设计思想73.2复杂shell设计思想83.2.1 作业及作业前后调度实现方法83.2.2进程组、会话与终端93.2.3命令行103.2.4 、bg、fg等信号的思想103.2.5 管道113.2.6重定向114 Shell的实现134.1数据结构134.2 程序结构134.2.1初始化环境134.2.2解析命令144.2.3查找外
2、部程序154.2.4执行命令164.2.5管道174.2.6作业控制命令185 结束语20致谢21参考文献22附录2326Linux命令解释器的设计摘 要:随着Linux系统使用的越来越广泛,越来越多的人开始深入的研究Linux,特别是对Linux shell的研究是对Linux研究最主要的部分。本文主要是研究了对shell的功能的一些认识,而且对shell的列表,管道,输入重定向和输出重定向等命令功能进行了实现,可以对shell命令解释器进行更加全面的认识和充分的了解,而且在shell命令解释器中执行正确的命令,从而对它的原理,方法等在程序中必须用到的知识原理有比较清楚的认识,最后通过对每个
3、功能的详细分析,进而编写出恰当实现各个功能的代码,从而做成一个Shell命令解释器。并且,在嵌入式领域中,与人们的需求相比,硬件的资源是微不足道的。这就意味着我们把不多的资源利用完成很多的需求,而嵌入式的设计在PC上编程是有很大不同的,它其实只需要一个很大程序的比较小的一方面就可以满足它的需求,因此我们必须把一些无用的程序删掉来换成空间。在嵌入式领域中就像传统的K shell,C shell,Bourne shell等大型的shell程序就会令硬件方面的东西很少。因此我们需要一个更符合嵌入式系统中使用的Shell。关键词:Shell;程序;设计与实现;嵌入式;LinuxAbstract:Acc
4、ompanied by the popularize of the Linux,more and more peopleare doing deeply study in it.The study of shell is the most important thing when study the Linux.It mainly includes the understand of some knowledge and function of the micro linux shell.Through the study of the orders in the shell like lis
5、t,pipe,input redirect and output redirect,readers can have a thorough sense about the shell and learn to use these orders accurately in shell which play an important role in programming later.Code accurately and achieve a simple shell with the functions above after analyzing the details of every fun
6、ctions module.Moreover,in the embedded field,the hardware resources are limited,but demand is unlimited.This means they have to use limited resources to accomplish a variety of needs and embedded design and programming in the traditional PC,is very different ,and it often requires only a small part
7、of a large program on meet its needs,so we had to cut out a number of useless programs in exchange for space .In the embedded field,as the traditional K shell,C shell,Bourne shell and other large-scale shell program will make our hardware resources are stretched.So we need a more suitable for embedd
8、ed systems used in the shell,this is my another objective of this design.Key words:Shell,Process,Design,Design and achieve,embedded,Linux前言shell作为Linux系统的最外层的部分,为使用者提供必备的接口。Shell作为用户和Linux内核之间的接口程序,起着一个桥梁的作用,假如把Linux内核当做是一个球心,那么shell就是球体的表面。从shell向Linux发出命令时,内核会对该命令做出相应的解释。本论文就是模拟一个shell命令解释器,包括:管道、
9、内部命令、外部命令、重定向命令。管道是Linux支持的最初Unix IPC其中的一个,具有这一些特点:管道是半双工的,里面的数据只能单向的流动;当双方需要通信时,要创造出来两个管道;但是只能用于父子进程和兄弟进程之间(具有亲缘关系的进程);其实就是他们自己独自组成一种的文件系统,这个文件系统是独立的:管道相对于管道两端的进程来说,就是独立的文件,它不是一般的文件,它并不属于一种文件系统,而是自己有自己的特点,独自构成一种文件系统,而且只是在内存中。当写数据时一个进程向其中一个管道中写的数据会被管道另一头的进程读出,而且写入的数据每次都在管道缓冲区的最后,并且每次都是从缓冲区的首端读数据。每当执
10、行shell命令行时一般会打开三个标准文件,这三个标准文件就是标准输入文件(stdin),一般对应用户所用的输入键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应着用户所用的输出屏幕。进程将从标准输入文件中读取输入数据,将正确的数据输出到标准输出文件,将不正确的信息输出到标准错误文件中。输入重定向,顾名思义,就是所把命令(或可执行程序)的标准输入重新定向到自己所认定的文件中。也就是说,输入不一定要来自键盘,可以来自一个自己指定的文件。输出重定向就是把命令(或可执行程序)的标准输出或标准错误输出重新定向到目标中。该命令的输出就不会在屏幕上显示,而是写入到自己的
11、目标文件中。Shell是一个命令解释器,它就是把用户输入的命令进行重新解释而且把这些命令送到内核中。不止如此,Shell对命令的编辑有自己相对应的编程语言,但是灵活的是用户自身编写由shell命令组成的程序也是允许的。Linux像windows一样提供了很多可视化界面有窗口、图标和菜单,大部分控制都是通过鼠标来操作。现在在Linux中稍微流行的窗口管理器就是是KDE。而shell就像窗口管理器一样,它可以对系统灵活地进行各种管理。不同的Linux系统的用户有同的界面或Shell,来满足自己相应的Shell需要。同Linux本身一样,Shell也有多种不同的版本。目前主要有下列版本的Shell:
12、 Bourne Shell:由贝尔尔实验室研发的。 BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell。 Korn Shell:是对Bourne SHell的拓展,与Bourne Shell是互相兼容的。 C Shell:是SUN公司Shell的BSD版本。如果我们是经常使用UMX/Linux系统的研发人员,我们对shell的功能会有很深的认识和理解。1 绪论1.1 Shell的定义Shell是一种特殊的程序,如下图所示。他是用户与Linux系统内核之间的通道。内核在系统开机时将内存载入,关机后不再管理系统。它对进程,内存,文件和通信等都无时无刻的管理
13、着。内核之外的自己编写的程序以及shell程序都保存在磁盘上,内核将这些程序加载到内存中运行,而且对它们运行完后进行系统清理。Shell是一个程序,在开机后系统启动。当用户开机并登陆后,系统不需要等待用户的命令会自动启动一个Shell。Shell会根据用户输入的命令后来执行命令:根据命令行的关键字来判断是那种命令,然后执行命令。当人们输入一组类似的命令是,希望会这些命令会自行的完成。这样的话,就可以把这些命令行输入到一个文件中,直接执行这个文件就可以完成那些命令的功能。1.1.1 UNIX ShellUNIX系统大都支持3种主流的shell,他们是BourneShell(也称为ATT shel
14、l)、C shell(也称为Berkeley)和Korn shell(Bourne shell的一个展集)。这三种Shell功能是很类似的,如果作为脚本的话,它们的还是有不同的。Bourne shell是标准的UXIN shell,用于系统管理。大部分系统管理脚本(如rc start和Stop脚本,shutdown)部是Bourne shell脚本。Bourne Shell的使用是非常简练的,而且很严谨,效率很高,它的命令提示符是$。C Shell完善了很多不同的功能,就像查询命令行历史,作业的前后台控制等。大部分的用户还是更倾向于C shell,其实管理者们还是倾向于Bourne Shell
15、。由于类似的程序,使用Bourne Shell会效率更高。C shell默认的提示符是百分号(%)。Korn shell是ATT的David Korn开发的,它是Bourne shell的-个扩展集,在增强改进C shell的基础上,Korn shell添加了更多功能。Korn shell几乎完全向上兼容Bourne shell,所以老的Bourne程序在Kore shell中运行良好。Korn shell默认提示符是美元符号($)。Linux上默认的shell是GUN bash( Bourne Again shell),这是一种增强的Bourne shell,人们可以根据自己的工作环境进行编
16、辑,因为它的功能有一部分还是有局限的,通过自己的编辑可以提高速度。如果用户想了解自己装的Linux是用的哪些Shell,直接在终端输入命令行:$cat/etc/shellls;即查看当前发行版本可以使用的shellLinux的环境中可以使用的Shell都在/etc/shells文件中。常用的版本包括bash(Bourne shell),tcsh(TC shell)金和ksh(Korn shell)。1.2 shell的历史Shell首个标准是在1979年由Stephen Bourne提出的,并且以该人的名字来作为名字。Bourne Shell是建立在Algol的程序的基础上的。在当时主要是对系
17、统进程的管理比较方便,所以收到了很大用户的支持,但是在交互方面还是有所不足,有待完善。C Shell是由加州大学伯克利分校开发的,跟Bourne shell发行的不同,它是跟操作系统同步发布的。它的主要的开发人是Bill Joy。C shell就是完善了Bourne shell的不足,是用户与系统的交互更加的方便。而且,对于大型机的使用,有扩展了其他的功能,起到了很大的帮助,但是在小型机的使用还是效率很低。而且,即使在大型机上,它的速度也不如Bourne shell。由于不同版本的Shell发布,人们开始有选择的使用Shell,对于不同的Shell有自己的见解。20世纪80年代中期,AT&T的
18、David Korn推出了Korn shell。其实Korn shell是对Bourneshell的一个拓展集,它在UNIX系统下可以运行的留长,还能在OS/2.VMS和DOS上运行的很顺利。Korn shell的优点就是可以不止可以再UNIX下使用,还可以在其它的系统下使用。由于Korn shell是对Bourne shell的拓展,由学习了C shell的优点,所以用户数很多。随着Linux的发展,Bourne Again shell (bash)开始流行起来。Bash是Linux操作系统默认上的shell。它的设计符合了IEE POSIX P1003.2/IS0 9945.2 shell
19、和工具标准。bash又增加了很多新的功能:命令行历史与编辑、目录栈、作业控制、函数、别名、数组、整数运算(底数可以是2-64),还增加了一些Korn shell的功能,如扩展的元字符,select循环和let命令等。1.3 shell的职责Shell的主要功能就是根据用户的输入的命令行,来判断这是哪种命令,并且通过关键字来分解,比如空格,如果判断出来有不能识别的字符,shell会自动替换该字符。Shell处理I/O和后台进程,然后shell会自动搜索该命令,并开始执行。Shell的另外的重要的作用就是对用户环境进行设定,这往往是刚开始就是初始化的时候就已经进行了。在初始化的文件中有很多变量,根
20、据不同的程序来设置相应的变量,所以用户在使用起来还是比较方便的。KornBash shell和C/TC shell还提供了其他的专门的功能:历史添加、别名、设置内置变量可以阻止用户对文件进行损坏或不小心退出,告诉用户作业已经结束。Shell还能用作编程语言来使用。2开发环境和开发工具介绍2.1开发环境-UbuntuUbuntu比较受欢迎的原因就是,它是完全像社会人们开放的,并且希望人们对系统进行完善并且是一些编程爱好者们共同开发的系统,所以Ubuntu目前是并将永远是免费的。但是,它还是需要成本的,它并不是无拘无束的可以自由的使用,使用的前提是对于社会来说,它是有益的,并不是恶意的使用它,人们
21、可以随时下载,更正编写自由软件的权利。所以,它在技术层面上是所有人的结晶,是让很多开发者的各种想法融于一身的软件。所以该软件随着时间的推移,使用起来会更加的方便和高效。这就是自由软件的优点,也是大家都推崇的原因。2.2开发工具-GCCGNU C编译器是一个非常优越的编译器,它在Linux等系统的运行是非常重要的,可以说,这个编译器是效率很高的编译器,也是大多数开源系统的使用的最多的编译器。最初,GCC被认为是GNU C Complier的缩写。经过10多年的发展,GCC不仅支持C语言,还支持Ada、C+、Java、Objective C、Pascal、COBOL等开发语言。但是Gcc已经不只是
22、一个但单纯的编译器了,人们已经将它的功能扩展到很多的语言上。GCC也变成GNU Co mpiler Collection(即GNU编译器族)的缩写。目前,GCC在人们的努力下,在所有的硬件平台上的使用都很方便,而且编译的过程也是十分简练,使用时可以通过自己的控制来灵活的使它在任意一个编译阶段停止,由于Unix的可移植性较高,几乎所有的Unix系统上都能看到GCC编译器,所以随着时间的流逝,人们会更加利用这个编译器,会更加的完善编译器。3 模拟shell设计3.1简单shell设计思想当我们知道Shell是如何使用的,我们也就可以开始编写一个自己的shell编译器了,起初编写时可以从简单的入手,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 命令 解释 设计 毕业论文
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-4820824.html