使用Bash相较于Perl或Python有什么优势吗?
嘿,我已经使用Linux一段时间了,觉得是时候深入学习一下shell脚本了。
不过,我发现自己找不到使用Bash比用Perl或Python有什么明显的好处。它们之间在性能或功能上有什么区别吗?我觉得Python和Perl在功能和效率上可能更合适。
8 个回答
通常情况下,Perl脚本的运行速度比bash要快(几乎每次都是这样)。
关于这个话题的讨论可以在这里找到: Perl与Bash的比较
bash其实不是一种编程语言,更像是一个命令解释器,它被修改得很复杂,以至于看起来像是脚本语言。对于一些简单的、一次性的任务,比如1到5行的命令,bash非常好用。但是在处理像数组这样的简单操作时,bash的写法就显得非常麻烦,远不如Perl或Python来得简单。我还发现bash有两个重要的使用原则不太符合:
第一个是“六个月规则”,意思是你应该能轻松理解自己写的脚本的目的和基本操作,即使你已经六个月没看过它了。
第二个是“每分钟多少个WTF规则”。每个人都有自己的极限,而我的极限比较低。一旦我每分钟遇到3个WTF,我就会考虑换其他方式了。
至于在像Perl和Python这样的脚本语言中“调用外部程序”,我几乎从来不需要这样做(顺便说一下:我几乎100%用Python编程)。Python的os和shutil模块通常能满足我大部分需求,还有处理tar文件、gzip文件、zip文件等的内置模块。还有glob模块、fnmatch模块……可用的工具很多。如果你遇到需要并行处理的任务,只需把代码缩进一个层级,放进一个名为'run()'的方法里,然后把这个方法放在一个继承自threading.Thread或multiprocessing.Process的类中,实例化你需要的数量,然后对每个实例调用'start()'。一般来说,设置并行执行不超过5分钟。
祝你好运,希望这些对你有帮助。
这里有两个优点:
简单性: 你可以直接使用所有那些很棒的Linux工具,比如
wc
、ls
、cat
、grep
、sed
等等。为什么还要一直使用Python的subprocess
模块呢?我越来越喜欢使用 gnu parallel,这个工具可以让你同时运行多个bash脚本。比如,在手册页上有个例子,可以批量生成目录中所有jpg文件的缩略图:
ls *.jpg | parallel convert -geometry 120 {} thumb_{}
顺便说一下,我通常在我的bash脚本中会有一些Python的调用(比如用来绘图)。用最适合这个任务的工具就好!