OS视角下对Shell的简单理解
今年的系统能力大赛的评测方式发生改变,需要在启动自己的操作系统之后,自动的扫描磁盘,运行XXXX-testcode.sh,为了做shell的支持,去简单了解了一下shell的原理。
Shell(外壳)是一种用户界面,用于与计算机操作系统进行交互。它提供了一个命令行界面(CLI),允许用户通过输入文本命令来执行各种操作,如运行程序、管理文件和目录、配置系统等。Shell 是用户与操作系统内核之间的中间层,它解析用户的输入并将指令传递给操作系统执行。——来自kimi的定义
简单解释一下,就是你可以在这个地方(shell提供的命令行界面)输入命令,它会解析并执行。在此我主要简单讨论.sh文件的执行流程。(不针对某个特定的shell,下面统称为shell来进行说明)
假设你有一个temp.sh文件,当你在命令行界面输入bash temp.sh这个命令的时候(其实这个命令也是由shell进行解析的),shell就会开始工作
首先分词器会将这行命令解析为一个一个的词(token):bash 和temp.sh
然后进行命令解析,也就是第一个参数“bash”。这个可能是一个内部命令(例如:ls,grep等),也可能是一个外部命令(外部可执行文件)(当然bash是一个外部命令,不过在操作系统读取的时候是不知道的)。这个怎么区分呢,shell的内部维护了一个命令表,记录了所有的内置命令名称和对应的处理函数。所以显然,在这个命令表中的命令就是内部,否则就是外部命令。如果是内部命令,则调用对应的处理函数;如果是外部命令,shell会使用PATH环境变量来查找外部命令(PATH是一个包含多个目录路径的列表,shell会一次在这些目录中查找可执行文件)。
接着是参数解析,参数可能是一个或多个选项(例如ls -l 中的-l),也可能是一个文件或数据。区分方法一般是:以-或--开头的一般是选项,否则一般是文件或数据。这些参数会传给对应的命令,然后在命令的相关处理函数中进行进一步的解析。
