首页 > 编程笔记

Shell是什么

通过前面的学习我们知道,管理整个计算机硬件的是操作系统的核心,然而核心也是需要被保护的,保护核心需要和其有良好的沟通和配合,那如何能与核心沟通呢?

我们一般只能通过 Shell 来跟核心进行沟通,从而让核心来完成我们想要完成的工作。那么什么是 Shell 呢?在学习 Bash Shell 之前,我们先了解一下什么是 Shell。

什么是Shell

由于计算机不能识别人类的语言文字,只认识由 0 和 1 组成的机器编码。那么人类应该怎样和计算机进行交流呢?

命令解释器就是其中的一种交流方式,人类通过输入计算机命令到命令解释器,然后由命令解释器将这些命令翻译成计算机的机器指令交给计算机去执行。在 Linux 操作系统中,命令解释器就是 Shell。

Shell 是操作系统的最外层,我们可以通过 Shell 与内核进行交流,以便于更好地使用计算机资源。Shell 通过合并一系列的编程语言,并将这些语言解释和传递给计算机内核,从而达到控制进程、文件、启动和其他程序的目的,也就是说 Shell 提示用户输入信息,然后由 Shell 向操作系统解释该输入的信息,操作系统完成该操作后由 Shell 传递给用户处理结果。

Shell 管理着用户和操作系统之间的交互,是用户与操作系统之间沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell 脚本编程去运行。

由于 Linux 的开放性,使得在 Linux 系统下对 Shell 的选择有很多,常见的有 Bourne Shell(/bin/sh)、Bourne Again Shell(/bin/Bash)、C Shell(/usr/bin/csh)和 K Shell(/usr/bin/ksh)等。其中最常用的 Shell 是 Bash,也就是 Bourne Again Shell(/bin/Bash),也是大多数 Linux 系统默认的 Shell。

注意,不同的 Shell 语言的语法不同,所以不能交换使用。

Shell 的特性有以下三点:
  1. 运行程序:Shell 类似于一个程序启动器,Shell 将程序载入内存并运行;
  2. 管理输入和输出:使用“<”“>”和“|”符号可以将输入和输出重定向。这样就可以通过 Shell 将进程的输入和输出连接到一个文件或者其他进程;
  3. 可编程。

Bash Shell的发展过程

Bash 是一个由 GUN 项目编写的 UNIX Shell,它是 Bourne-Again Shell 的缩写,简称为 Bash。

Bash Shell 的发展大致历经了几个重要阶段:
Linux 操作系统默认的 Shell 是 Bash。如何查看系统中的 Shell 呢?可以有如下几种方式的命令来实现:
1) 可以使用 cat/etc/Shells 命令查找 Linux 操作系统中所有的 Shell。
输入命令如下:

[root@logon ~]$ cat /etc/Shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh


2) 可以使用 /etc/passwd 命令以查看文件的方式查询用户默认的 Shell,在查询出的 /etc/passwd 中每个用户记录的最后一列就是该用户的默认 Shell。

3) 可以输入 sh 命令切换到 Bourne Shell;使用 ksh 命令切换到 Korn Shell。

Shell的工作原理

当用户以命令行方式登录 Linux 操作系统,即进入了 Shell 应用程序。这时,可以将 Shell 当成用户与内核之间的一个接口,但 Shell 主要是一个命令解释器,它能够接受并解释用户输入的命令,然后传递给内核,最后由内核来执行输入的命令。

Shell 运行程序的执行流程步骤如下:
1) 首先,读取用户输入的命令行。

2) 其次分析命令,以命令名作为文件名,并将其他参数改造为系统调用 execve() 内部处理所要求的形式。

3) 最后,由终端进程调用 fork() 建立一个子进程。

终端进程本身用系统调用 wait() 的方式来等待子进程的完成。当子进程运行时需要调用 execve(),子进程将会根据命令名到目录中查找由命令解释程序构成的文件,将它调入内存,执行这个程序即解释这条命令。

如果命令末尾有“&”后台命令符号,则终端进程不需要使用系统调用 wait() 等待,就会出现提示符,让用户输入下一个命令,然后接着执行步骤  1) ;如果命令末尾没有“&”命令符号,则终端进程需要一直等待,当子进程(即运行命令的进程)完成处理后停止等待,然后需要向父进程即终端进程报告,当终端进程醒来之后,需要进行判定,终端进程发提示符,让用户输入新的命令,接着执行以上步骤。

Shell 的运行程序流程图如图 1 所示。

Shell运行程序流程图
图 1 Shell运行程序流程图

优秀文章