Bash的特性
**********
本文是对Bash Shell(版本3.2, 2006年9月28日)特性的大概介绍.
本文档是'Bash'(版本3.2)的'GNU Bash参考手册'的3.2编辑版本, 上次更新
于2006年9月28日.
Bash有着其他流行shell所具有的一些共有特性, 也有一些其他shell所没有
的特殊特性. Bash借用了Bourne Shell('sh'), Korn Shell('ksh')和C-shell('
csh'及其增强版'tcsh')中的某些概念. 以下的目录将根据不同shell中出现的不
同特性分类来介绍Bash.
1 入门
******
1.1 Bash是什么?
===============
Bash是GNU操作系统的shell, 或者说命令行语言解释器. Bash这个名字取自
于'Bourne-Again SHell', 其作者是Stephen Bourne, 此人是Bash直系祖先'sh'
的作者, 而sh则第一次出现在第7版贝尔实验室Unix中.
Bash和'sh'大部分兼容, 并且借鉴了'ksh'和'csh'中的一些有用的特性. 其
目标是提供一种遵从IEEE POSIX Shell and Tools portion标准(IEEE 1003.11)
的实现. 相对'sh', Bash在交互性和可编程性方面更胜一筹.
GNU操作系统也提供了一些其他的shell, 如'csh'. 不过Bash是默认的shell.
和其他GNU的软件一样,Bash可移植性非常好。目前Bash几乎可以在所有的Unix
上运行,除此外,它的某些平台独立的移植也可在MS-DOS, OS/2和Windows上运行.
1.2 Shell是什么?
================
本质上讲,Shell就是一个能执行命令的宏处理器. '宏处理'指的是将简单
文本和符号扩展为更大的表达式的过程.
Unix shell既是一种命令解释器又是一种编程语言。作为命令解释器,bash
提供给用户一个使用GNU丰富工具集的界面。而bash作为一个编程语言的特性又
可以将这些工具组合起来。可以创建包含命令的文件,而这个文件本身又成为
命令。这种将命令组合起来放入一个文件而形成的复合命令在效果上和那些系统
命令(如'/bin'目录下的)没什么不同。这种机制使的用户可以定制自己的环境以
自动化日常任务。
Shell可以交互地或非交互地使用。在交互模式下,shell从键盘取得输入数
据, 在非交互模式下,shell从文件中读取输入数据。
Shell可以同步地或异步地执行GNU命令。在同步模式下,shell要等到一个命
令执行完后才能接受更多的输入。而在异步模式下, 在命令运行的同时,shell
可以接受输入并运行其他命令。Shell中的'重定向'机制允许更好地控制命令的
输入和输出。另外,shell允许控制命令运行的环境。
同时,shell也提供一些内部命令("buildins"), 这些命令用外部分立的工具
难以实现或实现起来很不方便。例如,'cd', 'break', 'continue'和'exec'等不
可能在shell之外实现,因为它们直接操纵shell自身。'history', 'getopts', '
kill'和'pwd'等可以用外部分立命令实现,但它们在shell内部实现起来更方便。
所有的内部命令将会在后续的章节中介绍。
虽然执行命令是shell最基本的功能,但它的强大(和复杂性)来源于其可编程
的特性。和所有的高级语言一样,shell提供变量,流程控制,以及引用和函数。
相对与作为一种编程语言,shell为在交互模式下使用提供了特殊的功能。这
些交互特性包括任务控制,命令行编辑,命令历史记录和别名机制。这些特性将
在本手册中介绍。
2 定义
******
以下的定义将在后续的章节中用到.
'POSIX'
基于Unix的一簇开放系统标准. Bash针对的是Shell and Utilities portion
POSIX标准1003.1.
'空白符'
空格或TAB字符
'内部命令'
在shell自身内部实现的命令, 而非存储在文件系统某处的可执行程序.
'控制操作符'
一个具有控制功能的'单词'. 它是一个'换行符'或者以下之一: '||', '&&',
'&', ';', ';;', '|', '(', ')'.
'退出状态'
一个命令返回给它的调用者的值. 该值限制为8位, 所以最大值为255.
'域'
作为shell扩展结果的文本单元. 扩展后, 当执行命令时, 这些'域'将作为
命令名和参数使用.
'文件名'
用于标识文件的字符串.
'任务'
构成一个管道线的一组进程, 以及由它们派生的子进程. 这些进程也属于同
一个进程组.
'任务控制'
用户可以用来有选择地停止(挂起)和重起(继续)进程执行的机制.
'元字符'
在没有被引用的情况下用来分隔单词的字符. 一个元字符指'blank'或以下
之一: '|', '&', ';', '(', ')', '<', '>'.
'名字'
只含字母, 数字和下滑线, 并以字母或下滑线开头的单词. '名字'通常用作
shell的变量和函数名. '名字'也被称作'标识符'(identifier).
'操作符'
'控制操作符'或'重定向操作符'. *欲查看重定向操作符的完整列表, 参见
重定向操作符::.
'进程组'
拥有相同进程组ID的一组相关的进程.
'进程组ID'
在一个'进程组'的生命周期内用来表示它的一个唯一的标识符.
'保留字'
对shell有特殊意义的'单词'. 大多数保留字被用于shell的流程控制构造,
如'for'和'while'.
'返回状态'
'退出状态'的同义词.
'信号'
进程被内核通知系统中发生了某个事件的机制.
'特殊内部命令'
被POSIX划归为特殊类的shell内部命令.
'token'
被shell看成一个单一单元的一串字符. 它是一个'单词'或'操作符'.
'单词'
不是'操作符'的'token'.
GNU Bash 手册 (1)
最新推荐文章于 2024-10-10 07:12:42 发布