bash手册翻译#3.2 shell命令

shell命令用法分为:
* 单一命令:最常见的类型
* 管道:多干命令之间通过输入输出连接
* 列表:按顺序执行多个命令
* 复合命令:控制流命令
* 进程交互:命令间的双向交互
* 并行计算

3.2.1 简单命令

一般就是空格隔开的一系列单词,通常以一个控制操作符结尾。(控制操作符就是前面介绍的:换行符 或者 ‘||’, ‘&&’, ‘&’, ‘;’, ‘;;’, ‘|’, ‘|&’, ‘(’, or ‘)’.,看到这里我们不禁想起那些复合语句为什么需要分号,是不是也是这个原因,等着看下面的章节)。

命令的返回状态就是命令的状态码,由waitpid函数提供,或者,如果命令被一个信号结束,那么返回值会是是一个128+n的值。(说道这里,我们不禁想起,为什么和waitpid有关系?原因是shell是我们执行命令的父进程,而shell 会调用waitpid等待命令执行完毕,并获取命令进程的状态,这应该就是这里说的意思,但不确定。)

3.2.2 管道流

这里直接说管道流不是非常合适,因为这里说的管道,因为对应的是pipelines,是包括管道符在内的一些列命令。而且这些命令是用两个控制操作符分隔的,这两个操作符是 | 和 |&,管道流中的每个命令都在他们自己的subshell中执行,应该就是每个命令有独立的子进程执行。所以退出状态也就是最后一个命令的退出状态。

3.2.3 列表

列表的定义是,一个或者多个pipeline,以‘;’, ‘&’, ‘&&’, or ‘||’分隔,同时选择性得以‘;’, ‘&’, 换行结尾。(看来分号很强大,既可以是分隔,也可以是结束),操作符中,‘&&’, ‘||’优先级相同,‘;’, ‘&’优先级相同。
领表以一行或者多行的形式出现也是可能的,目的是用来分清命令,这个和分号的功能一样。
(这部分还说有一段懒得翻译)

3.2.4符合语句

分为三种:
* 循环结构:针对重复的行为
* 条件结构:条件化执行
* 命令组:对命令进行分组

3.2.4.1 循环语句

注意以下两条语句:
n=0; while [[ n -lt 10 ]]; do echo n; ((n++)); done
n=0; while [ n -lt 10 ]; do echo n; ((n++)); done

第一条执行成功,第二条失败,提示integer expression expected。但是我们就是整数表达式。为题出现在n,语句中的n并不是整数,test确实支持 INTEGER1 和 INTEGER2的比较,但是编译器并不认为n是整数,怎么办,这就需要明确把值打印出来,用$n就可以:n=0; while [ $n -lt 10 ]; do echo n; ((n++)); done ,但是为什么[[ ]] 就可以直接用n,看文档,似乎只看到说[[支持variable expansion,什么意思,难道就是n可以直接换成值么。

其实,这种算数运算,一般可以直接用(()),比如:
`n=0; while (( n < 10 )); do echo n; ((n++)); done
非常好用。

还有一个比较有意思:
n=0; while [ !]; do echo n; ((n++)); done就是死循环,因为[] 默认是返回false,所以加上!就一直是true。

3.2.4.3 命令组

两种方式: (list)和{list;}

两点区别,第一,()是起一个subshell来执行,而{}是直接在当前shell执行。第二,()是被当作运算符,而{}是被识别为保留字,所以{和list之间必须被空格,或者其他元字符隔开。而运算符就不需要,它会被识别为单独的标记(token),所以解释器解析时并不一样。

所以在shell下如果直接执行:> (echo hello)是没问题的,但是执行:>{echo hello;}就有问题,{和echo之间需要有空格。同时,需要注意{}里的list后面分号。

译者序<br><br>毫无疑问,UNIX/Linux最重要的软件之一就是shell,目前最流行的shell被称为Bash(Bourne Again Shell),几乎所有的Linux和绝大部分的UNIX都可以使用Bash。作为系统与用户之间的交互接口,shell几乎是你在UNIX工作平台上最亲密的朋友,因此,学好shell,是学习Linux/UNIX的的开始,并且它会始终伴随你的工作学习。<br><br>shell是如此地重要,但令人惊奇的是,介绍shell的书没有真正令人满意的。所幸的是,我看到了这本被人称为abs的书,这本书介绍了bash大量的细节和广阔的范围,我遇到的绝大部分的技术问题--无论是我忘记的或是以前没有发现的--都可以在这本书里找到答案。这本使用大量的例子详细地介绍了Bash的语法,各种技巧,调试等等的技术,以循序渐进的学习方式,让你了解Bash的所有特性,在书中还有许多练习可以引导你思考,以得到更深入的知识。无论你是新手还是老手,或是使用其他语言的程序员,我能肯定你能在此书用受益。而本书除了介绍BASH的知识之外,也有许多有用的关于Linux/UNIX的知识和其他shell的介绍。<br><br>在看到本书的英文版后,我决定把它翻译出来,在Linuxsir论坛上结识了译者之一杨春敏共同翻译这本书,600多页的书是本大部头的书,我们花了6个月的业余时间才翻译完了。<br><br>关于版权的问题,英文版的作者Mendel Cooper对英文版的版权做了详细的约定,请参考:Appendix Q. Copyright。中文版版权由译者杨春敏和黄毅共同所有,在遵守英文版版权相应条款的条件下,欢迎在保留本书译者名字和版权说明以非盈利的方式自由发布此中文版,以盈利目的的所有行为必须联系英文作者和两位中文译者以获得许可。<br><br>本书得以成稿,我(黄毅)要多谢我的女朋友,本该给予她的时间我用来了翻译,多谢你的理解,你是一个很棒的女朋友!<br><br> 译者 杨春敏 黄毅<br> 2006.5.15<br>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值