最近一阵使用Linux颇多,N年前Unix上的经验还派上了不少用场。对于程序员来说Unix
上编程(包括shell和C)应该是不可或缺的体验。总结一下shell编程的优势。
1)众多强大的工具,兼有正则利器。
SHELL作为一种胶水语言,优势就在于,可以联合众多工具发挥作用。这其中最常用的我称为七种兵器。
find 过滤出目标文件 剑意:长生剑,以所有文件为源头,过滤出感兴趣的一部分文件
grep 过滤出目标行 剑意:孔雀翎,这个厉害,一下命中要害过滤出所需的行内容
awk 文本处理工具 剑意:碧玉刀,将行内容大块切分组合
cut 文本截取工具 剑意:霸王枪,简单截取使用较方便
sed 文本替换工具 剑意:离别钩,将不需要的勾出替换
tr 字符替换工具 剑意:小李飞刀,独门技艺只意识字符流,不分行处理
xargs 参数列表转换 剑意:多情环,不用for/while也能循环,舍我其谁
其中最重要的grep,awk,sed都支持正则表达,强大的工具为shell提供了基本保证。
当然除了这几个以外还有很多有用的工具,不一一列举。
2)管道 无疑是UNIX最具革命性的特征之一。
主要特点:
.不需要使用中间变量,不占用多于空间
.粘合众多工具,将积木式的工具构造方法发挥到极致
数据还在管道中流动,经过不同工具的重新铸造,可以无穷变化最终得到理想的形态,实在是一门艺术。
UNIX中常讲“一切都是文件”,对于管道来说一切都是流,没错,JAVA中流的概念与之很相似。
【SHELL之外】
SHELL是很强大,但是毕竟是比较简单直接的胶水语言,有时候不得不使用另外一对脚本语言中的“雌雄双剑” Perl / Python。
先说Perl,大家谈论到最多的就是他完备的正则表达能力,由于出现得最早,可以说已经成为了一种标准。
个人感觉Perl在两种情况下,上面的七种兵器无能为力。
一个是需要使用“非贪婪”的正则语义时。
另一个是需要协同操作两个以上文件时。
再看下Python,她是首个在脚本语言中使用对象概念的语言。经过多年的积累,特别是Google的强力支持,已经有了非常大的标准库,在与网络相关的脚本编程时是首选。
下面是几本看过的不错的书:
《高级Bash脚本编程指南》 目前只有电子版网上很容易找。涉及到Bash的细节非常深入。
《Linux Shell脚本攻略》 一个20岁的印度天才的作品,值得一读。
《正则指引》 关于正则表达内容全面翔实,国人原创精品,真的不错。
《Perl语言入门》 被称为“小骆驼书”,对于100行以内的编程足够了。不行再上“大骆驼”
《Python基础教程》 这本书的精华是后面的实战项目。