2.3 什么是shell

在开始讨论如何使用shell进行程序设计之前,我们先来回顾一下shell的作用以及Linux系统中提供的各种shell。
shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令。这点与Windows的命令提示符类似,但正如先前所提到的,Linux shell的功能更强大。例如,我们可以使用<和>对输入输出进行重定向,使用|在同时执行的程序之间实现数据的管道传递,使用$(...)获取子进程的输出。在Linux中安装多个shell是完全可行的,用户可以挑选一种自己喜欢的shell来使用。在图2-1中,我们显示了shell(实际上是两种shell:bash和csh)和其他程序环绕在Linux内核的四周。
由于Linux是高度模块化的系统,所以你可以从各种不同的shell中选择一种来使用,虽然它们中的大多数都是从最初的Bourne shell演变而来的。在Linux系统中,总是作为/bin/sh安装的标准shell是GNU工具集中的bash(GNU Bourne-Again Shell)。 因为它作为一个优秀的shell,总是安装在Linux系统上,而且它是开源的并且可以被移植到几乎所有的类UNIX系统上,所以我们把它作为将要使用的shell。在本章中,我们将使用bash的第2版并且使用那些与POSIX兼容的shell中常见的功能。同时,我们假设你的登录系统所使用的默认shell是作为/bin/sh安装的shell。在大多数Linux发行版中,默认的shell程序/bin/sh实际上是对程序/bin/bash的一个连接。
可以使用如下命令来查看bash的版本号:
![]()
想要更改到另一个shell——例如,bash不是你的系统中默认的shell,只需直接执行需要的shell程序(例如,/bin/bash)就可以运行新的shell并且改变命令提示符。如果你的UNIX系统上没有安装bash,则可以从GNU Web网站http://www.gnu.org上免费下载。它的源代码具有高度的可移植性,同时它也提供了一个好机会,可以在你自己的UNIX版本上毫无约束地进行编译。
创建一个Linux用户时,你可以设置这个用户要使用的shell。图2-2显示了在Red Hat用户管理程序中提供的默认选项。

图 2-2
还有许多免费的或商业的shell可以使用,表2-1对常用的shell做了一个简单的总结。
表 2-1
|
shell名称 |
相关历史 |
|
sh(Bourne) |
源于UNIX早期版本的最初的shell |
|
csh,tcsh,zsh |
C shell及其变体,最初是由Bill Joy在Berkeley UNIX上编写的。它可能是继bash和Korn shell之后第三个最流行的shell |
|
ksh,pdksh |
korn shell和它的公共域兄弟pdksh(public domain korn shell)由David Korn编写,它是许多商业版本UNIX的默认shell |
|
bash |
来自GNU项目的bash或Bourne Again Shell是Linux的主要shell。它的优点是可以免费获取其源代码,即使你的UNIX系统目前没有运行它,它也很可能已经被移植到该系统中。bash与Korn shell有许多相似之处 |
除了C shell和少数变体以外,所有这些shell都很相似,并且都与X/Open 4.2和POSIX 1003.2 规范中对于shell的规定非常一致。POSIX 1003.2规范中对于shell的规定很少,但在X/Open中的扩展规定则提供了一个更加友好、功能更加强大的shell。通常X/Open规范是一个提出更多要求的规范,进而由它产生的系统也更加友好。







