Linux程序设计(第4版)
上QQ阅读APP看书,第一时间看更新

2.3 什么是shell

在开始讨论如何使用shell进行程序设计之前,我们先来回顾一下shell的作用以及Linux系统中提供的各种shell。shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令。这点与Windows的命令提示符类似,但正如先前所提到的,Linux shell的功能更强大。例如,我们可以使用<和>对输入输出进行重定向,使用|在同时执行的程序之间实现数据的管道传递,使用$(...)获取子进程的输出。在Linux中安装多个shell是完全可行的,用户可以挑选一种自己喜欢的shell来使用。图2-1显示了shell(实际上是两种shell:bash和csh)和其他程序环绕在Linux内核的四周。

图2-1

由于Linux是高度模块化的系统,所以你可以从各种不同的shell中选择一种来使用,虽然它们中的大多数都是从最初的Bourne shell演变而来的。在Linux系统中,总是作为/bin/sh安装的标准shell是GNU工具集中的bash(GNU Bourne-Again Shell)。因为它作为一个优秀的shell,总是安装在Linux系统上,而且它是开源的并且可以被移植到几乎所有的类UNIX系统上,所以我们把它作为将要使用的shell。在本章中,我们将使用bash的第3版,并且在大多数情况下只使用那些所有POSIX兼容的shell都具备的功能。我们假设bash被安装为/bin/sh并且它是你的登录所使用的默认shell。在大多数Linux发行版中,默认的shell程序/bin/sh实际上是对程序/bin/bash的一个连接。

你可以使用如下命令来查看bash的版本号:

如果你想要切换到另一个shell(例如,bash不是你的系统中默认的shell),你只需直接执行需要的shell程序(例如,/bin/bash)就可以运行新的shell并且改变命令提示符了。如果你使用的是UNIX系统并且bash没有被安装,你可以从GNU Web网站www.gnu.org上免费下载它。它的源代码具有高度的可移植性,它在你的UNIX版本上编译成功几乎不会有什么问题。

当你创建Linux用户时,你可以设置这个用户要使用的shell,这个工作既可以在创建用户时完成,也可以在创建用户之后,通过修改用户信息来完成。图2-2显示了使用Fedora选择用户shell的界面。

图2-2

还有许多免费的或商业的shell可以使用,表2-1对常用的shell做了一个简单的总结。

表2-1

除了C shell和少数变体以外,所有这些shell都很相似,并且都与X/Open 4.2和POSIX 1003.2规范中对于shell的规定非常一致。POSIX 1003.2对于shell的规定很少,但在X/Open中的扩展规定则提供了一个更加友好、功能更加强大的shell。X/Open通常是一个提出更多要求的规范,但遵循它的系统也更加友好。