- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Shell解DIYShell解DIY
l 本文适合的读者对象
对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 语法的:
l 简单命令
简单命令是(可选的)一系列变量赋值, 紧接着是空白字符分隔的词和重定向符号, 最后以一个控制操作符结束. 第一个词指明了要执行的命令, 它被作为第 0 个参数. 其余词被作为这个命令的参数.
这个定义可以这样来理解:
1、 可以有变量赋值,例如
a=10 b=20 export a b
2、 “词”是以空白字符分隔开的,空白字符包括制表符(tab)和空格,例如:
您可能关注的文档
- GPS相关基础知识GPS相关基础知识.docx
- GPS基础知识介绍GPS基础知识介绍.ppt
- GRUB使用说明GRUB使用说明.doc
- GRUB命令详解GRUB命令详解.doc
- GSM原理小节GSM原理小节.doc
- GSM原理练习题GSM原理练习题.doc
- GSM基础wtlGSM基础wtl.doc
- GSM基础知识GSM基础知识.doc
- GSM手机工作流程GSM手机工作流程.doc
- GSM路测参数大全GSM路测参数大全.doc
- 5.3.1函数的单调性(教学课件)--高中数学人教A版(2019)选择性必修第二册.pptx
- 部编版道德与法治2024三年级上册 《科技提升国力》PPT课件.pptx
- 2.7.2 抛物线的几何性质(教学课件)-高中数学人教B版(2019)选择性必修第一册.pptx
- 人教部编统编版小学六年级上册道德与法治9 知法守法 依法维权(第一课时)课件.pptx
- 三年级上册品德道德与法治《学习伴我成长》.pptx
- 部编版小学道德与法治六年级上册6 人大代表为人民 课件.pptx
- 部编版小学道德与法治六年级上册1感受生活中的法律第一课时课件.pptx
- 2.5.2圆与圆的位置关系(教学课件)-高中数学人教A版(2019)选择性必修第一册.pptx
- 2.5.1直线与圆的位置关系-(教学课件)--高中数学人教A版(2019)选择性必修第一册.pptx
- 14.1.1 同底数幂的乘法(教学课件)-初中数学人教版八年级上册.pptx
文档评论(0)