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

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

Opensource.com

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

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

Bash

  • 是一种 Linux/Unix shell 命令语言
  • 非常适合编写使用命令行界面 (CLI) 实用程序、利用一个命令的输出到另一个命令(管道)以及执行简单任务(最多 100 行代码)的 shell 脚本
  • 可以按原样使用命令行命令和实用程序
  • 与 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 个 “not”,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 可以用于几乎所有任务这一事实才是最重要的。

这不是完全的苹果与苹果的比较,所以这取决于情况。 对于快速的小型脚本,我更喜欢 Bash 而不是 Python。

回复 作者 Pyrax

可能是 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 中返回响应。 所有将它们粘合在一起的东西,如身份验证、网络、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 容易得多。

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