我需要编写一个脚本来执行以下操作:
注意:2D数组对我的程序来说有点温和,但我目前正在使用几个1D数组(由于Bash脚本数组的限制)。
这些任务似乎都有点“重壳”,因为它很容易用一堆shell命令实现,所以我认为Bash脚本是一种自然的方式。到目前为止,我的结果还不错,但在我开始重构和完成代码之前,我想知道将它移植到Python是否更好。我已经在很多地方读过Python对bash“优越”的看法。我已经完成了一些Python脚本,据我所知,这是因为它有更多的内置库并且支持面向对象的编程。但是,我看到的所有脚本都使用shell命令,例如: http://magazine.redhat.com/2008/02/07/python-for-bash-scripters-a-well-kept-secret/
实现令人讨厌的语法,比如必须将命令定义为变量,如下所示:
#You could add another bash command here
#HOLDING_SPOT="""fake_command"""
#Determines Home Directory Usage in Gigs
HOMEDIR_USAGE = """
du -sh $HOME | cut -f1
"""
#Determines IP Address
IPADDR = """
/sbin/ifconfig -a | awk '/(cast)/ { print $2 }' | cut -d':' -f2 | head -1
"""
......并且需要包装功能和其他乐趣。
我只是愚蠢还是看起来不那么直观?使用Python有速度优势,它会超过Bash在shell脚本命令方面的简单优势吗?或者bash(没有2D数组,大括号/括号错综复杂)的语法是否有理由跳转到Python?
答案 0 :(得分:7)
如果你找不到切换它的理由,可能是因为没有理由。
我开始切换python,因为我的一些脚本需要一些模板化过程,而不是shell脚本。
还有另外一些需要配置文件解析或参数解析的脚本让我学习了更多python,最后还有另外一些处理trac(用python编码)让我切换到python的脚本。
但是,如果您可以快速而干净地在bash中概述脚本而不需要其他工具,那么保留bash,这是一个很棒的工具。
答案 1 :(得分:3)
Bash在与系统的实际接口上非常好,因为它可以很容易地运行外部程序,并且可以处理流中的数据。 Python擅长使用较少的表面区域,涉及更多的循环,逻辑,数据结构等。课程的马。
如果不知道问题的详细信息,很难建议您使用哪种方法或如何使用两者。但从它的声音来看,这是我在shell脚本中完全做的事情。不过,我找到了一种没有数组的方法。关键是要停止用C ++思考并开始用bash思考。
答案 2 :(得分:3)
这实际上取决于你想要做什么,但这里有一些普遍的差异。
shell(包括bash)希望将所有变量视为字符串,并通过简单的文本替换来访问变量值。有时这很方便;有时不那么多。
在shell脚本中,您倾向于通过各种实用程序来管理数据。有时这很方便;有时不那么多。
Python具有非常好的字符串操作,所以如果你正在做大量的文本文件,那么在Python中执行它可以更快(写入和运行),而不是弄清楚你想要的sed或awk咒语。
这是另一回事 - 你将在shell脚本中使用的许多工具都有很多选项,它们本身就是它们自己的迷你语言,其中一些很简洁甚至是钝的。 Python可以比调用很多这些迷你语言的shell脚本更具可读性,因为它在语法上是一致的。
有些项目适合于面向对象的方法,Python可以轻松地支持,而bash ......则不是这样。 Python还支持一些功能性技术,这些技术对于某些项目来说非常方便,而bash ......你可以得到它们。
简而言之,shell的脚本语言旨在将各种单一功能实用程序捆绑在一起,并提供一些便利性,而Python则是一种强大的编程语言,您可以在其中构建完整的GUI或Web应用程序。你喜欢。
我个人也发现Python的整体语法比shell脚本语言好得多;我的程序倾向于做我想要的而不需要很多摆弄,当他们不这样做时,通常是因为逻辑错误而不是错误将我想要的内容翻译成语言。对我来说,Python在这方面几乎是独一无二的,尽管我听说Ruby程序员对他们最喜欢的语言说了类似的话。
如果您熟悉并喜欢shell脚本,那么Perl可能是一个更容易的步骤,因为它原本打算替换shell脚本(和sed / awk)。