问题:Shell脚本与Python相比的优势[关闭]
我尝试了几次学习shell(bash)脚本的过程,但是却被语法所取代。然后,我找到了Python,并且能够完成Shell脚本可以在Python中完成的大部分工作。我现在不确定是否应该再花时间在学习shell脚本上了。所以我想问:
与Python相比,shell脚本有哪些优势使其成为必不可少的工具?
我不是专业的系统管理人员,但是我对为家庭用户设置Linux系统感兴趣,因此我认为学习Shell脚本可能变得必要。
回答 0
- Shell脚本具有用于I / O重定向的更简单的表示法。
- 从Shell中的现有程序创建管道更简单。
- Shell脚本重用了整个程序。
- Shell是通用的(在Unix之类的东西上)-不一定要安装Python。
“的确,您可以在Python中完成所有可以在Shell中完成的工作;同样,在Python中有些容易实现的事情在外壳中很难实现(就像有些东西在Shell中实现容易但在Python中很难实现一样)。从长远来看,了解两者将是最好的。
回答 1
“与Python相比,shell脚本有什么优势使其成为必不可少的工具?”
外壳不是必不可少的。您为什么认为有这么多?bash,tcsh,csh,sh等,等等,
Python 是一个外壳。这不是理想的运行脚本,而不是用于运行所有命令的脚本。
Python是所有Linux发行版中的或多或少的标准部分。
更传统的外壳会做很多事情。
他们有一个方便的用户界面来运行命令。这包括单行命令,shell在其中搜索您的PATH,派生并执行所请求的程序。它还包括管道,序列和并发程序(使用
;
,|
和&
),以及一些重定向(使用>
和<
)。它们具有运行脚本的简陋的类似于编程语言的功能。这种语言很难使用,效率极低。这种语言的大多数语句都需要分叉一个或多个其他过程,从而浪费时间和内存。
从shell运行程序,将stderr重定向到日志文件,这样的事情就很好了。在外壳中执行该操作。
作为Python脚本,几乎所有其他内容都可以更高效,更清晰地完成。
你们两个都需要。但是,永远不要使用传统的外壳语言编写带有if语句或循环的脚本。
回答 2
Shell使普通和简单的动作真正简单了,但代价是使更复杂的事情变得更加复杂。
通常,一个小的Shell脚本会比相应的python程序更短,更简单,但是python程序会趋于优雅地接受修改,而随着代码的添加,shell脚本的可维护性会越来越少。
这样的结果是,为了获得最佳的日常生产力,您需要shell脚本,但是您应该主要将其用于一次性脚本,并在其他地方使用python。
回答 3
Shell脚本无可比拟,而Python则无能为力。Shell脚本的最大优点是,您使用的命令与使用Shell时使用的命令相同,因此,如果您是大量Shell用户,则Shell脚本有时会成为一种非常快速简便的方法来自动执行Shell工作。
我也发现在shell脚本中处理数据管道比在python中更容易,尽管它在python中绝对可行。
最后,您不必启动其他干扰程序即可运行Shell脚本,从而为您提供了非常小但有时可能在速度和内存使用方面的明显优势。
但是话又说回来,Python脚本更具可维护性,因此我正试图从大型的难看的Shell脚本迁移到Python脚本。使用Python进行异常处理和质量检查也更加容易。
回答 4
前面的所有答案都表明,不必学习shell脚本。但是学习永远不是一件坏事。这实际上是个人优先级的问题。别人很难告诉您什么是不值得的。
大多数程序员发现,每次学习新语言都会变得越来越容易。(自然语言也是如此。)并且越早开始越好。
加:学习了一门语言,使您可以从完全的知识和熟悉的位置上摆脱它的局限性。这可能不会让你被解雇,但是可能会从同龄人那里获得啤酒!
回答 5
我同意以前的大多数答案。我认为Shell命令最适合执行面向文件系统的任务(复制和移动文件,grep等)。我认为,如果您必须读写文件,那么Shell会更好,因为单个>>file.txt
重定向会立即添加到文件中,而不是像file=open('file.txt','a'); file.write()
等等。
目前,出于个人用途,我混合了两种方法,分别是创建一个python脚本,然后每次在shell中比在python中更容易执行某个操作时就调用os.system(’command’)或os.popen(’command’)。
回答 6
该外壳随处可见。如果您坚持使用一套相对基本的可移植功能,则您的脚本可以在手机,无线路由器,DVR,上网本,工作站,大型钢铁服务器等上运行。在许多系统上,Python不一定是开箱即用的,根据环境的不同,可能很难安装它。
学习一些shell脚本也可以帮助您学习一些命令行技巧,因为命令行是shell。这对于采取一些相当长且复杂的命令行,并在您意识到您将需要更多的命令行之后将其转换为更通用的脚本也很有用。
该外壳还具有一些非常强大的功能。据我所知,管道是一个非常有趣的控制结构,仅对外壳是本地的。
回答 7
选择Python的Shell脚本时要考虑的另一件事是将在目标计算机上运行的Python版本。RHEL5(仅举一例)将存在很长时间。RHEL5停留在Python 2.4中。有很多不错的库,它们依赖于2.4后的Python添加的功能。