linux shell beginners


习惯c语言的同志们,写linux script 的时候请注意小细节

1, 流程控制语句的条件判断部分方括号后面:请加空格

例如

if空格[空格$aa lt num空格]
then
code segment
else
code segment
fi
2,关于shell解释器

有时候shell解释器会引起麻烦(这种麻烦来自于有时你并不想让shell解释一些字符)

先说一下metacharachter(元字符):一个含有多重意义的字符被称为元字符,这种字符通常不仅仅包含其自身的字面意思。bash shell有自己的一套metacharachter,并有相应的解释机制。正则表达式系统也有自己的元字符和相应的解释机制,通 常,这些元字符标准是一致的,但是不排除不一致的情况。

bash grep要求在匹配时给出一个pattern,如果此pattern是一个正则表达式,则有可能携带有shell 的metacharacter。

这里情况就变得比较复杂,下面分类:

1,如果该字符是shell metacharachter,同时,在正则表达式里面有其特殊含义,then:

首先记得用strong quoting把这个pattern括起来以防止shell试图对其进行解释而得到不希望得到的结果,其次正确的利用正则表达式本身的机制表达你想要得到的结果(转义,反义,锚定,重复,模糊匹配等等烂七八糟的东西)

2,如果该字符不是shell metacharacter,但是正则表达式的元字符,括不括就随你的便了,但是注意正确表达正则表达式

3,如果该字符是shell metacharachter,而不是正则表达式的元字符,请你把它括起来防止shell解释器解释。

关于以上说法最明显的例子是grep 匹配\字符的情况,正确的写法是:

grep '\\' sourcefile

如果写成 grep \\ 或者grep "\\"

shell会提示:grep:末尾的斜杠,这说明shell解释器对pattern进行了解释,并把解释后的结果(这里是\)递给了grep,grep接到参数后认为这是一个元字符(逃逸字符)并且没有被转义,是非法的,所以会报错。

如果写成grep '\'

shell同样提示:grep:末尾的斜杠,这是因为shell虽然不解释\,但是参数\传给grep以后仍然认为这是一个元字符。

若果写成 grep \ sourcefile

bash shell会停止响应,猜测是因为bash不知道你要grep什么东西了


要说明的是:

强弱quoting的区别在于:

弱quoting(一对双引号)里面的$,\等少数几个字符仍然被shell解释,其余metacharachter不被解释

强quoting(一对单引号)里面的元字符均不被解释,包括$,\在内。

这里写一个匹配的小例子:

human<tab>sfuhojhfa<tab>human

human<tab>dlfuil;djsfikdsf<tab>mouse

rat<tab>ldfkuaselkt;lkfg<tab>human

对于以上文本,要找出两个human中间加一段字符串的行,可以这么写:

human.*human

以上是我对shell grep的理解,有错误还请斧正

posted on 2011-11-29 15:45 ewre 阅读(251) 评论(0)  编辑 收藏 引用 所属分类: Scripting language


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

留言簿(2)

文章分类

文章档案

最新评论

阅读排行榜