Shell解DIYShell解DIY.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)和空格,例如:

文档评论(0)

yxutcangfp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档