Bash vs. Python: 应该使用哪种语言?

这两种编程语言各有优缺点,使其更适合于某些任务。
197 位读者喜欢这篇文章。
Perl tricks for system administrators

Opensource.com

BashPython 是大多数自动化工程师最喜欢的编程语言。两者各有优缺点,有时很难选择应该使用哪一个。 诚实的答案是:这取决于任务、范围、上下文和任务的复杂性。

让我们比较这两种语言,以便更好地了解每种语言的优势。

Bash

  • 是一种 Linux/Unix shell 命令语言
  • 非常适合编写使用命令行界面 (CLI) 实用程序的 shell 脚本,利用一个命令的输出到另一个命令(管道),以及执行简单的任务(最多 100 行代码)
  • 可以直接使用命令行命令和实用程序
  • 启动时间比 Python 快,但执行时间性能较差
  • Windows 没有预装; 您的脚本可能与多个操作系统不兼容,但 Bash 是大多数 Linux/Unix 系统上的默认 shell
  • 与其它 shell(例如,csh、zsh、fish) *不* 完全兼容
  • 管道化 ("|") CLI 实用程序,如 sed、awk、grep 等会降低其性能
  • 缺少许多函数、对象、数据结构和多线程,这限制了它在复杂脚本/编程中的使用
  • 缺少良好的调试工具和实用程序

Python

  • 是一种面向对象编程 (OOP) 语言,因此它比 Bash 更通用
  • 可用于几乎任何任务
  • 适用于大多数主要操作系统,并且默认安装在大多数 Unix/Linux 系统上
  • 与编写伪代码非常相似
  • 具有简单、清晰、易于学习和易于阅读的语法
  • 拥有大量的库、文档和一个活跃的社区
  • 提供比 Bash 更好的错误处理功能
  • 拥有比 Bash 更好的调试工具和实用程序,这使其成为开发涉及多行代码的复杂软件应用程序的绝佳语言
  • 应用程序(或脚本)可能包含许多第三方依赖项,必须在执行之前安装这些依赖项
  • 对于简单的任务,需要编写比 Bash 更多的代码行

我希望这些列表能让你更好地了解使用哪种语言以及何时使用它。

在您的日常工作中,您更多地使用哪种语言,Bash 还是 Python? 请在评论中分享。

标签

16 条评论

这是计算结果
Bash 有 3 个 nots,2 个 lacks,1 个 better,1 个 poor,1 个 great
Python 有 2 个 betters,1 个 great

这不是足球。“记分表”在您尝试为任务选择语言时没有帮助。 首先:查看您的任务。 其次:选择 *最适合该任务* 的语言。 就是这样。 有时,它会是 Bash - 无论有没有记分表。 我可以告诉你,99.99% 的时候,它将在配置或维护系统时发生。 因为 bash 是一种领域特定语言,而不是像 Python 这样的通用编程语言。 混淆的产生是因为 Python 在很多情况下在系统管理领域也可以,但 Bash 的领域专门在那里。 坦率地说,比较这两种语言就像苹果和橙子的比较。

回复 作者 Greg P

这实际上取决于任务。
我喜欢用 Python 自动化所有与 HTTP 通信的东西。
用 bash 和 curl 执行此操作是可能的,但很丑陋。

当与其它本地程序交互时,我喜欢 bash。

Bash 是 Linux 系统管理的本地语言。 你把那些本来要输入到 shell 提示符中的东西放在 bash shell 脚本中。

Python 是一种编程语言。 你使用它和其它编程语言来做那些你本来无法通过在 shell 提示符下输入命令来完成的事情。

完全同意你的观点!

回复 作者 Lee Reynolds (未验证)

很好的信息,我喜欢这两种语言,但 python 几乎可以在任何任务中使用这一事实超越了一切。

可能是 python,特别是对于任何超过几行的内容。 还有一些漂亮的 CLI 工具(无论是 git 还是 skopeo)可以通过 python 访问(参见 subprocess.Popen(),shlex),如果它们没有等效项 (Requests)。 在更高的层次上,Ansible 开始发挥作用……或者 Bash 来完成这个循环。 :)

是的,对于许多任务,我更喜欢 ansible/python/bash 的混合,这让我的生活更轻松:)

回复 作者 Pavel Zubaty (未验证)

事实上,bash 比 python 慢得多。 前提是 python 是用 C 编写的,这使得它更接近操作系统的核心。

GNU Bash 作为本机 Linux 工具,最初只是为了执行常规管理任务而设计的,我们中的一些人确实将其用于许多其它事情,这在某种程度上是好的。

除了启动时间外,Bash 比 Python 慢,但无论如何,这种差异太小,人类无法注意到

回复 作者 tamrakar

谢谢。 这很有帮助

Archit,这是一个很好的资源! :)

他们互相补充。 我在 linux 上编写了许多小型 bash 脚本,就像我在 windows 上编写 powershell 一样。 然后我通过修改后的子进程运行它们,并在 json 中返回响应。 像身份验证、web、ssh、https 等所有的粘合剂都是 python。

Bash 也很以操作系统为中心,并且在很大程度上依赖于 linux 命令。 虽然编写可以在所有 windows/macOs/linux 上完全相同工作的 python3 非常容易,只要你选择在所有地方都可以工作的模块即可。 (现在大多数流行的 pypi 模块都可以)。

您是否有任何数据或证据表明 bash 较慢? 设置 python 的开销,它在版本之间可怕地中断这一事实……它的依赖地狱和许多其它缺点都没有被提及。 这是一个相当有偏见的观点

与大多数人一样,这取决于工作。 如果代码少于 10 行,我倾向于更喜欢 bash,尤其是当它将几个其它实用程序连接在一起形成一个时。

对于 bash,我不同意一种说法
管道化 ("|") CLI 实用程序,如 sed、awk、grep 等会降低其性能

情况恰恰相反……管道化 CLI 实用程序可以加速其性能,因为管道中的每个步骤都是并行化的,因此它可以同时处理多个部分,从而利用这些多核。 当通过 TB 文件进行多层处理时,这非常有效。

Python 缺乏对真正多线程的支持,尽管它可以像 bash 一样进行多进程处理,但 bash 中的 | 使其比 python 更容易完成那些倾向于在管道中运行的任务。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.