实现一个简单的shell
班级: 姓名: 学号:
1.实验内容
能在虚拟shell界面下面相应一些简单的shell命令,如ls,echo,whereis,cd等。 实现步骤:
(1)在虚拟的shell界面上出现命令提示符($或#);
(2)获取用户指令:获取用户在命令提示符后面输入的命令及其参数,并注意命令输入的最大长度;
(3)解析指令:对用户输入的命令进行解析,解析出命令名和参数;
(4)寻找命令文件:每个命令的执行都必须依靠对应的可执行文件,这些文件的存放路径存放在用户的PATH环境变量里;
(5)执行命令:可通过fork( )系统调用创建一个进程来完成执行命令的任务,具体的命令执行用execv( )函数。
2.简单的shell分析
a. 首先shell是一个程序,在以linux为内核的发型版本中如centos,debian中,
类unix系统中,当我们输入用户名和密码登陆之后,我们就执行一个shell解释器,通常是/bin/bash。
b. 在虚拟的shell界面上出现命令提示符($或#)。
c. 获取用户指令:获取用户在命令提示符后面输入的命令及其参数,并注意命令
输入的最大长度。
d. 解析指令:对用户输入的命令进行解析,解析出命令名和参数。
e. 寻找命令文件:每个命令的执行都必须依靠对应的可执行文件,这些文件的存
放路径存在在用户的PATH环境变量里。
f. 执行函数:可通过fork()系统调用创建一个进程来完成执行命令的任务,具体
的命令执行用execv()函数。
其次shell的基本框架可以用下面的代码概括,这部分代码出自《现在操作系
统(英文第三版)》(Modern Operation Systems)原书P54图1-19 这能模拟出shell最基本的行为:接受用户输入< = >执行相应程序,甚至借组execv族函数可以直接给程序传参数。
3.简单的shell的设计
? Type_prompt()的实现
提供终端提示符,比如$或#,在用户路径下,那么用户路径就用~代替,否则会显示完整路径。 ? Read_command()的实现
获取用户输入的命令和参数,然后使用exec族函数执行。输入的分析,就是对用户输入的字符串进行处理,把一个字符串拆成多个字符串(命令和参数)并分别复制到malloc()分配的空间中。 ? 使用execvp()执行命令
Execvp()搜索的PATH环境变量中指定目录中的ls命令的位置。
表头文件: #include