- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编写自己的Shell解释器
摘要:本期的目的是向大家介绍shell的概念和基本原理,并且在此基础上动手做一个简单shell解释器。同时,还将就用到的一些 linux环境编程的知识做一定讲解。
本文适合的读者对象
对linux环境上的c语言开发有一定经验;
对linux环境编程(比如进程、管道)有一点了解。
概述
本章的目的是带大家了解shell的基本原理,并且自己动手做一个shell解释器。为此,
首先,我们解释什么是shell解释器。
其次,我们要大致了解shell解释器具有哪些功能;
最后,我们具体讲解如何实现一个简单的 shell 解释器,并对需要用到一些 linux环境编程的知识做一定讲解,并提醒你如果想深入掌握,应该去看哪些资料。
Shell解释器是什么?
Shell解释器是一个程序。对,是一个程序,而且,它就在我们的身边。在linux系统中,当我们输入用户名和密码登陆之后,我们就开始执行一个shell解释器程序,通常是 /bin/bash,当然也可以是别的,比如/bin/sh。(详细概念请看第一期中的shell有关部分)
提示:在 /etc/passwd 文件中,每个用户对应的最后一项,就指定了该用户登陆之后,要执行的shell解释器程序。
在 linux 字符界面下,输入
man bash
调出 bash 的帮助页面
帮助的最开始就对bash下了一个定义:
?
bash 是一个兼容于 sh 的命令语言解释器,它从标准输入或者文件中读取命令并执行。它的意图是实现 IEEE POSIX标准中对 shell和工具所规范的内容。
?
Shell解释器的作用
在登陆 linux 系统之后,屏幕上就会出现一行提示符,在我的机器上,是这样的:
[root@stevens root]#
这行提示符就是由bash解释器打印出来的,这说明,现在已经处于 bash 的控制之下了,也同时提示用户,可以输入命令。用户输入命令,并回车确认后,bash分析用户的命令,如果用户的命令格式正确,那么bash就按照用户的意思去做一些事情。
比如,用户输入:
[root@stevens root]# echo “hello, world”
那么,bash就负责在屏幕上打印一行“hello world”。
?
如果,用户输入:
[root@stevens root]# cd /tmp
那么,bash就把用户的当前目录改变为 /tmp。
所以,shell解释器的作用就是对用户输入的命令进行“解释”,有了它,用户才可以在 linux 系统中任意挥洒。没有它的帮助,你纵然十八般本领在身,也施展不出。
bash每次在“解释”完用户命令之后,又打印出一行提示符,然后继续等待用户的下一个命令。这种循环式的设计,使得用户可以始终处于 bash 的控制之下。除非你输入 exit、logout明确表示要退出 bash。
?
Shell语法梗概
我们不停的命令 bash 做这做那,一般情况下它都很听话,按你的吩咐去做。可有时候,它会对你说:“嗨,老兄,你的命令我理解不了,无法执行”。例如,你输入这样的命令:
?
[root@stevesn root]# aaaaaa
?
bash会告诉你:
bash: aaaaaa: command not found
?
是的,你必须说的让它能听懂,否则它就给你这么一句抱怨,当然也还会有其它的牢骚。
那么,什么样格式的命令,它才能正确理解执行了?这就要引出shell 的语言规范了。
Shell作为一个命令语言解释器,有一套自己的语言规范,凡是符合这个规范的命令,它就可以正确执行,否则就会报错。这个语言规范是在 IEEE POSIX的第二部分:“shell和tools规范”中定义的。关于这份规范,可以在这里看到。
官方的东西,总是冗长而且晦涩,因为它要做到面面俱到且不能有破绽。如果读者有兴趣,可以仔细研究这份规范。而我们的目的只是理解shell的实现思想,然后去实现一个简单的 shell 解释器,所以没必要陷入枯燥的概念之中。
现在请继续在 linux 字符界面下输入 man bash,调出 bash 的帮助页面,然后找到 “shell语法”那一部分,我们就是以这里的描述作为实现的依据。
在 bash帮助的“shell 语法”一节,是这样来定义shell 语法的:
????????? 简单命令
简单命令是(可选的)一系列变量赋值, 紧接着是空白字符分隔的词和重定向符号, 最后以一个控制操作符结束. 第一个词指明了要执行的命令, 它被作为第 0 个参数. 其余词被作为这个命令的参数.
这个定义可以这样来理解:
1、? 可以有变量赋值,例如
a=10 b=20 export a b
2、? “词”是以空白字符分隔开的,
您可能关注的文档
- usrmye厦_门大学管理学与管理经济学2005及答案年考研试题.doc
- 北科大软件测试,android简章.doc
- 备份Linux操作系统.doc
- 备考2011高考数学基础知识训练C.doc
- 本地化测试软件缺陷分类详解.doc
- 本科毕业论文(设计)-李旺.doc
- 本科毕业论文(设计)任务书、开题报告、指导教师指导情况记录表.doc
- 本科毕业论文(设计)指导过程记录册.doc
- 本科汇编语言习题答案全部(可打印版).doc
- 本科计算机信息第二学期《汇编语言程序设计》.doc
- 小学数学课堂学生数学学习习惯养成策略研究教学研究课题报告.docx
- 2025年餐饮行业老字号品牌餐饮行业可持续发展研究报告.docx
- 2024粮油食品检验人员每日一练试卷及答案详解(名校卷).docx
- 社区老年助餐服务2025年中央厨房智能化改造市场需求分析报告.docx
- 2024法律硕士高频难、易错点题(巩固)附答案详解.docx
- 2025年跨境电商运动服饰智能仓储分拣系统对物流效率提升的影响研究.docx
- 高中数学建模视角下无人机集群避障算法的优化设计教学研究课题报告.docx
- 社区老年助餐服务2025年中央厨房智能化改造对社区养老服务的拓展.docx
- 跨境电商文具礼品行业2025年保税仓跨境电商物流物流信息化建设报告.docx
- 2025年餐饮品牌供应链食品安全风险评估与管理报告.docx
文档评论(0)