您好,欢迎来到一二三四网。
搜索
您的当前位置:首页myShell:Linux Shell 的简单实现

myShell:Linux Shell 的简单实现

来源:一二三四网

这是之前写的博客,那时因为内容涉及学校正在上的课程的作业,经同学提醒,删除了,现在恢复,供有需要的同学参考。

实验目的

综合利用进程控制的相关知识,结合对shell功能的和进程间通信手段的认知,编写简易shell程序,加深操作系统的进程控制和shell接口的认识。

实验内容

  • 可以使用Linux或其它Unix类操作系统;
  • 全面实践进程控制、进程间通信的手段;
  • 编写简易shell程序。

实验步骤与结果

shell的基本功能分析

Shell是用户和系统内核之间的一个接口程序,shell可以较好地保护系统内核免受非法操作的破坏,也能让用户能方便地完成自己的任务。它是一个命令解释command-language interpreter,我们提交的每条命令都会通过shell的解释,然后再提交给内核执行。

当我们如图1一样,启动一个终端时,会打印出“用户@主机:~$”的提示符,这是由bash打印的,bash是shell的一种,我们可以手动指定自己要使用的shell。

对于Shell来说,当用户需要执行一条命令时,它会先看看这条命令是否为内部命令,如果不是,再去环境变量$PATH中去找一下这是不是一个可执行的程序,如果都不是,shell会返回错误,提示没找到这条命令:

shell外部命令包括linux提供的一些使用的命令,比如ls,grep等,和我们自行安装的一些软件。

预计实现的功能

  • 命令提示符:如图1一样,输出命令提示符(并设置对应的颜色);
  • 常用外部命令:ls,cp,cat;
  • 可执行程序运行支持:允许通过./helloworld 这样的方式来执行可执行程序
  • 常用内部命令:help,echo,cd,exit
  • 无效命令提示:如图2一样提示未找到命令

设计及实现过程

shell我们一直都在用,其实很容易直观地想到它的运行机制就是:

按照图4的运行流程,我们可以设计出我们自己的shell程序的大致框架:

while(TRUE){
print_prompt();
get_command();
if command valid
deal_command();
else
    print_error();
}

图5中的shell框架来自《现代操作系统》一书,和我们刚开始自己想的框架没有太大差别,说明我们的大体思路是没有问题的。只是我们的框架太“抽象”了些,没有多少指导意义,而这里则比较清楚地展示了shell执行中需要fork命令子进程,以及调用exec族函数来执行命令等细节。


图6展示了我们正在使用的shell版本,本实验中模仿的shell将以bash为标准。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- howto1234.net 版权所有 湘ICP备2023021910号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务