Shell 脚本的简单介绍
什么是 Shell
Shell 应该是命令解释器,将 Shell 脚本解析成操作系统能理解的操作去执行。 Shell 脚本就是一系列的命令合集。
Shell 的种类
Unix/Linux 上常见的 Shell 脚本解释器有 bash、sh、ash、csh、ksh 等,习惯上把它们称作一种 Shell。我们常说有多少种 Shell,其实说的是有多少种 Shell 脚本解释器。
在不同的操作系统中,支持的 Shell 脚本是不一样的,不同的 Shell 脚本的命令和语法方式也有所区别的。
在 Linux 下面可以执行下面命令,来查看支持的 shell 的种类:
cat /etc/shells
在网上查了下资料,大体上有这么几种 shell:
-
Thompson shell 这是世界上第一个 Unix shell,1971 年发行的第一版 Unix 操作系统就包含了它,是一个非常简单的命令行解释器。它的作者是 Ken Thompson。
-
sh 全称叫 Bourne Shell,1976 年在贝尔实验室被开发出来,为的就是要替代 Thompson shell,作者是 Stephen Richard (Steve) Bourne。后来为了纪念作者所以名字叫 Bourne Shell,简称 sh,再后来成了 Unix 标准默认的 shell。
-
csh 全称叫 C Shell,作者是 Bill Joy,1978 年在伯克利的加利福尼亚大学时开发完成的,主要是为了让用户更容易的使用交互式功能,并把 ALGOL 风格的语法结构变成了 C 语言风格。
-
tcsh 全称叫 TENEX/TOPS C shell,是 csh 的增强版,并且完全兼容 csh。它不但具有 csh 的全部功能,还具有命令行编辑、拼写校正、可编程字符集、历史纪录、作业控制等功能。所以后来大家都纷纷用 tcsh 取代 csh。早期的 OS X 是预装 tcsh 来作为默认的 shell 的,后来在 10.3 版本后就把 bash 作为默认的 shell 了。
-
ksh 全称叫 Korn Shell,作者是 David Korn。有很长一段时间,大家要么选择 Bourne shell,要么选择 C shell,为了改变这种状况,到了 1983 年,当时在贝尔实验室的 David Korn 开发了 Korn shell。ksh 结合了所有的 C shell 的交互式特性,融入了 Bourne shell 的语法,并新增了诸多其他功能。 在 2000 年前 ksh 都还一直是 AT&T 的专有软件,后来经历复杂的版本演变和 license 变更,成为了一个开源的软件。原生的 ksh 一般是指 ksh88,AIX 操作系统把它作为默认的 shell,后来经历了多个版本的演变,比如 ksh93、ksh93u、ksh93t、ksh93v。 后面在其基础之上又衍生出了多个 shell 的变种,如:dtksh、tksh、oksh、mksh、SKsh、pdksh。
-
ash 全称叫 Almquist shell,它是一种轻量级的兼容 sh(Bourne Shell)的 Shell,大小只有 92K,对于小内存的机器非常有帮助,但是不提供扩展,所以现在使用起来会觉得不是很方便。它的作者是 Kenneth Almquist,在 1989 年开发完成,90 年代初在 BSD 版本的 Unix 上替代 Bourne Shell,成为默认的 shell。目前 BSD 衍生版本的 Unix(如 NetBSD、DragonFly BSD、MINIX 等)上仍然是默认的 Shell。Android 在 4.0 以下使用 ash 作为默认的 shell,之后换成了 mksh。 具体演变点击这里查看。

Almquist shell 演化图 修正:BSD 不能算是 Linux,算是 Unix 的开源版本,其衍生版本 OpenBSD、NetBSD 等也算是 Unix,感谢网友提示。
-
dash 全称叫 the Debian Almquist Shell,是 Debian 驱动的一个 ash(Almquist shell)的衍生版本,因为 Debian 衍生出来的 Linux(如 Ubuntu)把它作为默认的 shell,所以才成为一个影响力比较大的 shell 种类。
-
bash 全称叫 Bourne Again Shell,作者是 Brian Fox,在 1989 年开发完成。它是 sh(Bourne Shell)的增强版本,GNU 工程的一部分,用来替代 Bourne shell。它用于基于 GNU 的系统,如大多数的 Linux(Red Hat、Slackware、Caldera)都以 bash 作为缺省的 shell,并且运行 sh 时,其实调用的是 bash。OS X 也把它作为默认的 shell,Windows 也可以通过 Cygwin 或者 MinGW 来支持。
-
zsh 全称叫 Z Shell,作者 Paul Falstad 在 1990 年还是普林斯顿大学的学生时写了 zsh 的第一个版本。zsh 名字来源于耶鲁大学教授 Zhong Shao,那个时候 Zhong Shao 还是普林斯顿大学的助理教授。 zsh 是在 Bourne shell 的基础上扩展出来的,经历了大量的改进后,又引入了 bash、ksh 和 tcsh 的新特性,而且它是开源的,很多人都在推崇它,甚至有人说它是终极 Shell。
-
cmd Windows 下的命令行工具。
-
PowerShell 也是 Windows 下面的命令行工具,支持 .NET Framework 技术。
目前各主要操作系统下缺省的 Shell
| 操作系统 | 默认 Shell |
|---|---|
| AIX | ksh |
| Oracle Solaris | rsh(sh 的限制版本) |
| FreeBSD | csh |
| Linux(大部分) | bash |
| Mac | bash |
| Windows | cmd & PowerShell |
| Android 4.0 以下 | ash |
| Android 4.0 及以上 | mksh |
所以如果想要学习 shell 脚本,应该学 bash。而且在 Windows 上面可以通过 Cygwin 或者 MinGW 来支持 bash。