代码见github
引言
用过Unix/Linux系统的人都知道,Unix系统中很多命令和程序都是在终端中运行,这个终端就是shell。不同的Unix都有不同的默认shell程序,包括sh、csh、bash等等不同的shell程序。那么什么是shell,shell究竟做了什么,如何实现简单的shell呢?
基础知识
程序与进程
进程实际上就是运行中的程序,而程序就是存储在文件中的机器指令,每个进程就是程序的一个实例,逐条执行程序文件中的CPU指令。
进程有很多属性,包括进程ID,父进程ID等等,内容太多现在介绍也很难记住,我们在使用时再介绍也不迟。
shell的基本功能
首先,shell本身就是一个程序,但是他是用来管理进程和运行进程的程序。主要有三个功能:
- 运行程序
- 可以编程
- 管理输入和输出
首先是运行程序,ls和date实际上都是C语言编写的普通程序,shell将他们载入内存并运行,之后将结果输出到屏幕。因此,shell很大的作用就是运行程序。
wutao@wutao-XXXX:~$ ls
Desktop Downloads git Pictures Templates
Documents examples.desktop Music Public Videos
wutao@wutao-XXXX:~$ date
2017年 03月 11日 星期六 15:36:12 CST
其次是管理输入和输出,shell可以使用< > 和|将输入和输出重定向。如下代码所示,我们就能将程序ls的输出重定向到文件file中(默认为屏幕终端)。
wutao@wutao-XXXX:~$ ls -l > file
wutao@wutao-XXXX:~$ cat file
total 48
drwxr-xr-x 2 wutao wutao 4096 3月 11 2017 Desktop
drwxr-xr-x 2 wutao wutao 4096 3月 11 2017 Documents
drwxr-xr-x 2 wutao wutao 4096 3月 11 15:05 Downloads
-rw-r--r-- 1 wutao wutao 8980 3月 11 14:28 examples.desktop
-rw-rw-r-- 1 wutao wutao 0 3月 11 15:36 file
drwxrwxr-x 3 wutao wutao 4096 3月 11 15:00 git
drwxr-xr-x 2 wutao wutao 4096 3月 11 2017 Music
drwxr-xr-x 2 wutao wutao 4096 3月