您的位置:首页 > 运维架构 > Shell

bash参考手册之三(基本的Shell特性)

2013-01-11 16:53 253 查看
3 基本的Shell特性

Bash是Bourne-Again Shell的缩写。 Bourne shell是传统的Unix shell程序,最初是由斯蒂芬·伯恩编写的。所有Bourne shell的内建命令在Bash中都可用。评价和引用的规则是基于POSIX规范的'标准'的Unix shell。

本章简要总结了shell的“积木”:命令,控制结构,shell函数,shell参数,shell扩展,重定向(这是一种导向输入和输出到命名文件的方法),以及shell如何执行命令。

•shell语法:你输入的命令shell能懂么。

•shell命令:你可以使用的命令。

•shell函数:把命令组合起来。

•shell参数:shell如何存储值。

•shell扩展:Bash怎样扩展参数和各种扩展方法。

•重定向:控制输入和输出的方法。
•执行命令:当你运行一个命令时,会发生什么。

•shell脚本:执行shell命令的文件。

3.1 shell语法

•shell操作:shell的基本操作。
•引号:如何去掉字符的特殊意义。
•注释:如何指定注释。

当shell读取输入时,它会进行一系列操作。如果输入内容以注释开始,shell忽略注释符号(“#”),和该行的其余部分。

否则,大致来说,shell读取输入,将输入分为单词和操作符,按照引号的规则来确定不同的单词和字符的含义。
然后,shell把这些符号分解成命令和其他结构,去掉一些字符的特殊含义,扩展另外一些字符,按照需要重定向输入和输出,执行指定的命令,等待命令的退出状态,并且使得这个退出状态对进一步处理是可用的。

3.1.1 shell操作

以下是一个对shell读取和执行命令进行的简要描述。基本上,shell执行以下操作:

1.读取输入内容,从一个文件(shell脚本),从-c调用选项提供的字符串(见调用Bash),或从用户的终端。

2.把输入分成单词和操作符,(根据引用规则)。这些字符通过分隔符分隔的。这一步也执行了别名的扩展(见别名)。

3.解析字符为简单和复合命令(见shell命令)。

4.执行不同的shell扩展(见shell扩展),把扩展结果分解为文件名列表(见文件名扩展),命令和参数。

5.执行所有必要的重定向(见重定向),从参数列表中移除重定向操作符和它们的操作数。

6.执行命令(见执行命令)。

7.根据情况可以选择等待命令完成并收集它的退出状态(见退出状态)。

3.1.2 引用

•转义字符:如何去除一个单个字符的特殊意义。

•单引号:如何抑制shell对一组字符序列的解释操作。

•双引号:如何抑制shell对一组的字符序列的大多数的解释操作。

•ANSI-C引用:如何在带引号的字符串中扩展ANSI-C序列。

•区域翻译:如何翻译成不同语言的字符串。

引用是用来去除某些字符或单词在shell中的特殊意义。引号可以用于禁用对特殊字符的特殊处理,以防止被识别出来的保留字被特殊处理,以及防止参数扩展。
每个shell分隔符(见定义)对shell都具有特殊的意义,如果它仅仅是代表字符本身,则必须被引号包含。如果正在使用命令历史扩展(见history交互),历史扩展字符,通常是'!',必须用引号包含以防止历史的扩展。关于历史扩展的详细信息,请参阅bash的历史实用工具。

bash有三个引用机制:转义字符,单引号和双引号。

3.1.2.1 转义字符

不带引号的反斜杠“\”是的bash转义字符。它保留了除换行外的下一个字符的字面含义。如果\换行成对出现,反斜线本身中没有引号,\换行被视为续行(也就是说,它将被从输入流中删除,并有效地忽略)。

3.1.2.2 单引号
将字符包含在单引号(''')中,能够保留引号内的每个字符的字面含义。一个单引号不应出现在两个单引号之间,即使前面有一个反斜杠。

3.1.2.3 双引号
将字符放在双引号(“”)中,能够保留在引号内的所有字符的文本值,但是除了'$','`','\',以及历史扩展被启用时的'!'。字符'$'和'`'双引号内保留其特殊的含义(请参阅shell扩展)。反斜杠保留它特殊的意义的情况是,只有当后接以下字符:'$','`','“','\',或换行时。在双引号里,反斜杠后面跟着这些字符之一时,反斜杠本身将被移除。反斜杠前导没有特殊含义的字符时,保持不变。双引号中可以包含双引号,要在被包含的双引号前面加上一个反斜杠。如果历史扩展被启用,历史扩展将被进行,除非出现在双引号中的'!'使用反斜杠转义。反斜杠前的'!'不会被删除。
特殊参数'*','@'在双引号中有特殊的含义(见扩展shell参数)。

3.1.2.4 ANSI-C引用

$“string'形式的单词被特殊处理。这个词扩展为字符串,同时以反斜杠转义字符替换为指定的ANSI C标准内容。反斜杠转义序列,如果出现的话,则进行解码,如下所示:

\a

警报(响铃)

\ b

退格键

\e

\ E

一个转义字符(ANSI C)

\f

跳页

\n

换行

\r

回车

\t

水平制表符

\v

垂直制表符

\\

一个反斜杠

\'

单引号

\"

双引号

\nnn

8位字符,它的值是八进制值nnn(一到三个数字)

\xHH

8位字符,它的值是十六进制值HH(一个或两个十六进制数字)

\uHHHH

(ISO/ IEC 10646)的Unicode字符,它的值是十六进制值HHHH(一至四个十六进制数字)

\uHHHHHHHH

(ISO/ IEC 10646)的Unicode字符的值是十六进制值HHHHHHHH的(8个十六进制数字)

\cx

control-x字符

扩展的结果是单引号包含,就像没有$符号一样。

3.1.2.5 特定区域的翻译

双引号的字符串前面加上一个美元符号($)将导致根据当前的区域设置转换字符串。如果目前的语言环境是C或POSIX,美元符号将被忽略。如果该字符串被翻译和替换了,那么结果仍然有双引号。
有些系统使用由LC_MESSAGES shell变量确定的消息分类。其他从TEXTDOMAIN shell变量的值创建消息分类的名称,可能添加后缀“.mo”。如果您使用变量的TEXTDOMAIN,您可能需要设置TEXTDOMAINDIR变量。还有一些人用这种方式:

TEXTDOMAINDIR
/
LC_MESSAGES
/LC_MESSAGES/
TEXTDOMAIN
.mo.

3.1.3评论

在一个非交互的shell,或交互式shell中,内建命令shopt 的interactive_comments选项启用(见内建命令shopt)的情况下,“#”开头的单词,使这个单词以及该单词之后的该行所有剩余的字符被忽略。交互的shell没有启用interactive_comments选项时,不允许注释。
在交互式shell中,interactive_comments选项是默认启用的(见交互shell)。

原文链接:http://www.gnu.org/software/bash/manual/bash.html#Basic-Shell-Features
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: