Bash4.0中文文档解读二

BASH 中文文档

2.4 Shell扩展

有七种扩展:大括号扩展波浪号扩展参数和变量扩展命令替换算数扩展单词拆分文件名扩展

2.4.1 大括号扩展

echo a{d,c,b} = echo ad,ac,ab

mkdir /usr/local/src/bash/{old,new,dist,bugs}

格式:{x...y[增量]}

大括号不会识别字符串"&{"

2.4.2 波浪号扩展

以~开头

波浪号描述
~$HOME的值
~/foo$HOME/foo
~fred/foo用户fred主目录中的子目录foo,即$PWD/foo
~+/foo$PWD/foo
~-/foo${OLDPWD - ‘- -’ /foo}
~N命令dirs +N所显示的字符串
~+N命令dirs+N所显示的字符串
~-N命令dirs-N所显示的字符串
2.4.3 参数和变量扩展

以$开头

参数描述
${参数:-单词}参数没有设置或者为空就替换为单词;否则替换成参数值
${参数:=单词}参数没有设置或者为空就把单词赋给参数再替换参数的值
${参数:?单词}参数没有设置或者为空就把单词写到标准错误输出中
${参数:+单词}参数没有设置或者为空、,不进行任何替换;否则替换成单词
{ 参 数 : 偏 移 量 } < b r / > {参数:偏移量}<br /> <br/>{参数:偏移量:长度}扩展为参数中从偏移量开始的不超过长度个字符,没指定长度就从偏移量开始的子字符串。(长度和偏移量都是算术表达式,又称子字符串扩展)
长度值要大于等于0
${!前缀*}
${!前缀@}
2.4.4 命令替换

命令替换用命令的输出取代命令本身,,

格式为

$(命令)
或者
·命令·
2.4.5 算术扩展

算术扩展可以对算术表达式求值并替换成的求值的结果,,

格式为

$((表达式))
2.4.6 进程替换

管道

格式为

<(命令列表)
或者
>(命令列表)
2.4.6 单词拆分

shell会扫描参数扩展、命令替换和算术运算的结果。

2.4.7 文件名扩展

模式匹配

字符描述
*匹配任何字符串
匹配单个字符
[…]匹配方括号中的任一字符
?(模式列表)与模式列表匹配零次或一次
*(模式列表)与模式列表匹配零次或多次
+(模式列表)与模式列表匹配一次或多次
@(模式列表)与模式列表中的模式之一匹配
!(模式列表)与模式列表中的任一模式之外的字符匹配

[:类别:]

类别描述
alnum匹配所有字母和数字
alpha匹配所有字母
ascii匹配所有(ASCLL)字符
blank匹配所有空白符
cntrl匹配所有控制字符(即ASCLL中的二十个字符)
digit匹配所有的数字(0-9)
graph匹配所有可显示字符(可打印字符中,空格和退格符不可显示)
lower匹配所有小写字母
print匹配可打印字符(非控制字符都可打印)
punct匹配所有标点符号
space匹配空格
upper匹配所有大写字母
word匹配单词里面的字符(大小写字母)
xdigit匹配所有十六进制数字(0-9和A-F)
2.5 重定向

重定向可以打开或关闭当前shell执行环境的文件

< >

把标准输出(文件描述符为1)和标准错误输出(文件描述符为2)重定向到文件目录列表中:

ls > 目录列表  2>&1

标准输出重定向到文件目录列表中,因为 标准输出被重定向到文件目录列表终止前,标准错误输出已经被复制到标准输出中了

ls 2>&1 >目录列表

上述两个是相同的结果,但是比较推荐用第一种。。。

重定向时,会对以下文件进行处理:

/dev/fd/fd    如果fd是个有效的整数,则复制文件描述符fd
/dev/stdin    复制文件描述符0
/dev/stdout   复制文件描述符1
/dev/stderr   复制文件描述符2
/dec/tcp/主机名/端口号   如果主机名是个有效的主机名称或因特网地址,并且端口号是整数型的端口号或服务名称,Bash会试图打开一个到相应的套接字端口的TCP连接
/dev/udp/主机名/端口号   如果主机名是个有效的主机名称或因特网地址,并且端口号是整数型的端口号或服务名称,Bash会试图打开一个到相应的套接字端口的UDP连接
2.5.1 输入重定向

格式为

[n]<单词
2.5.2 输出重定向

格式为

[n]>[|]单词
2.5.3 输出重定向的追加

格式为

[n]>>单词
2.5.4 输出和错误输出重定向

格式为

&>单词

或者

>&单词
2.5.5 输出和错误输出重定向的追加

格式为

&>>单词
2.5.6 即插即用文本

格式为

<<[-]单词
   即插即用文本
结束符   
2.5.7 即插即用字符串

格式为

<<<单词
2.5.8 文件描述符的复制

重定向运算符(用来复制输入文件描述符)

[n]<&单词

输出

[n]>&单词
2.5.9 文件描述符的移动

重定向运算符(把文件描述符数字转移到文件描述符n上)

[n]<&数字-

输出

[n]>&数字-

2>&1

2.5.10 打开文件描述符以备读出和写入

重定向运算符

[n]<>单词
2.6 命令的执行
2.6.1 简单命令的扩展
  • shell会从左到右进行下列扩展、赋值、重定向:

1.被分析器当作(在命令名称之前的)变量赋值和重定向的单词,将被保存下来以备后续处理

2.不是变量赋值和重定向的单词会被shell扩展,如果扩展以后还有单词,则其中的第一个会被当作命令的名称,剩余的当作该命令的参数。

3.进行前面所说的重定向

4.每个变量赋值语句中"="后面的文本在赋给变量之前会进行大括号扩展、参数扩展、命令替换、算术扩展、引用去除

2.6.2 命令的搜索和执行
  • 命令拆分成单词后,执行下面的操作:

1.如果命令名中不含斜杠,shell试图找到它。如果有一个同名的shell函数,则执行该函数

2.如果这个名称不是函数,shell会在内部命令列表中搜索它。如果找到,则执行该内部命令

3.如果这个名称既不是函数名,也不是内部命令,并且不含斜杠,Bash会搜索$PATH中每个目录里面同名的可执行文件。

4.如果搜索成功,或者命令名中含有一个或多个斜杠,shell就会在独立的执行环境中执行这个命令。

5.如果因为文件格式和可执行文件不同导致,并且该文件不是一个目录的名称,它就会被当做一个shell脚本的方法执行

6.如果命令不是异步执行的,shell会等待它的结束并收集其返回状态

2.7 Shell脚本

Shell脚本是包含shell命令的文本文件。

Bash脚本的开头通常是#!/bin/bash

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
译者序<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、付费专栏及课程。

余额充值