21

对于在 Linux 平台上编写用于流程自动化的脚本,哪种脚本语言会更好?Shell 脚本、Perl 或 Python 还是还有其他的?我对他们所有人都是新手。所以,我只是在考虑去哪一个?

4

21 回答 21

45

答案是:最适合这份工作的!

我的经验法则;

Bash - 用于可能需要 for 循环重复执行某些操作的简短脚本。

Perl - 与某种文本处理或文件处理有关的任何事情,特别是如果它是一次性的。只需做一个肮脏讨厌的 perl 脚本就可以了

Python - 如果它是你可能想要再次做的事情或者非常类似的事情。那么至少你有机会重用脚本。

于 2008-09-16T08:56:14.430 回答
10

使用所有三个,从 bash/awk/sed 加上 fileutils(grep、find 等)开始,然后使用 perl 和 python 向上移动抽象层次结构。

这样,您将能够自己决定哪一个最适合您的需求。我说从 bash 和朋友开始,因为它们无处不在,有些机器没有安装 perl 或 python,你会在那里感到无助,尤其是在传统的 unix 领域(即不是 linux)

于 2008-09-16T08:54:13.747 回答
8

在选择脚本语言来帮助自动化您的 linux / unix 环境时,我认为最重要的是......您的替代品 :-)

我的意思是下一个/其他可能必须维护您的脚本的系统管理员。我目前在一个环境中工作,主要的 Unix 家伙是一个真正的脚本负责人,但他主要限制自己使用 bash,并加入了一些 perl 和 windows vbscript 以求好运。至少它迫使我重新审视我的 perl。

在同意这里的其他评论的同时,我的建议是掌握 bash - 在可能的情况下尽可能多地使用 bash,因为大多数人都知道,并且可以维护/调试它。而且它将是最便携的。与 sed & awk 一起使用特别强大。

当你掌握了这些之后,你可以回到这里问“在 bash 之后我应该学习什么脚本语言?” :-)

JB

于 2008-09-16T09:00:05.993 回答
4

我推荐bash、awk 和 sed。

重击- http://tldp.org/LDP/abs/html/

awk - http://www.uga.edu/~ucns/wsg/unix/awk/

http://www.grymoire.com/Unix/Awk.html

sed - http://www.ce.berkeley.edu/~kayyum/unix_tips/sedtips.html

http://www.grymoire.com/Unix/Sed.html

只是一些想法。

于 2008-09-16T08:51:16.953 回答
4

我认为这取决于您想要自动化的任务有多复杂。就个人而言,我一直使用 shell 脚本,它使您能够调用 awk、sed、grep、find、ls、cat 等,它们可以组合在一起完成几乎所有使用 perl 或 python 可以实现的任务。另一方面,如果您想要自动化的过程很复杂(例如,不仅仅是线性的步骤序列),那么您可能会发现用 perl 或 python(甚至 ruby​​!)编写脚本要快得多,并且它们更易于维护。

于 2008-09-16T08:52:27.183 回答
4

我将 Perl 用于非常简单的脚本之外的任何事情。

我也'use warnings', 'use strict', 避免反引号,将系统称为'system($command, @and_args)'. 因为我喜欢它是可维护的:IPC::Run(用于管道)、File::Fu(用于文件名、临时文件等)、YAML(用于配置或其他数据)和 Getopt::Helpful(所以我记得选项是什么。)

于 2008-09-16T09:44:09.587 回答
3

取决于手头任务的复杂性和问题域。

Bash 脚本对于简单的系统自动化任务来说既快又脏。对于比移动文件和运行命令更复杂的事情,我个人认为 Perl 是下一个作为事实上的sys-admin goto 自动化工具。为了更多地关注代码重用和可读性/可维护性,我想将它升级到 Python 或 Ruby。

PHP 也可以用于自动执行任务,但是根据我的经验,它并没有被广泛接受。

这真的归结为你最感兴趣学习什么语言,最能用于自动化,除了许多其他的东西。

于 2008-09-16T08:55:25.303 回答
2

我更喜欢 shell 脚本只用于非常小的任务。编写健壮的 shell 脚本需要大量关于可能的陷阱的知识,而这些知识只能通过实践来学习。但是即使学习基础知识也会大大提高您的生产力!

如果我需要复杂的逻辑,我通常使用 Python。复杂的意思是任何有两个以上的 if 语句 =)

Perl 就其最初的用途而言是可以的,但请注意,您学习的许多 perlisms 不适用于其他任何地方。

Python 和 Ruby 大致相当。我建议您好好学习其中一个,然后查看另一个教程。我更喜欢 Python,但这真的取决于个人喜好。

总结一下:学习 shell 脚本的基础知识。至少学好 Python 或 Ruby。

于 2008-09-16T08:56:43.133 回答
1

我一直在推荐 Python。它应该让你做任何事情。不过,对于小任务,我使用 shell 脚本。

于 2008-09-16T08:51:08.700 回答
1

我通常会说你最了解的那个可以达到你想要的结果。像所有宗教战争一样,在学习了大量语言之后,你意识到你可以用大多数语言做大部分事情(注意我确实说得最多)。我使用 Perl。它可能不像 Python 或 Ruby 那样最新,但它确实有来自 CPAN 的大量库支持。而且我还没有发现任何我不能做的事情。当我这样做时,我会查看其他语言,以找出哪种语言可以填补这一空白。

如果我从今天开始,也许我会选择 Python 或 Ruby,但我对它们的了解还不够,无法做出判断。您的任何朋友/同事是否知道脚本语言。这可以极大地帮助您,因为学习新语言时的支持非常重要。

祝你好运

于 2008-09-16T08:53:45.370 回答
1

嗯,是这样的:

Perl 不是对用户最友好的脚本语言,但它具有 CPAN(综合 Perl 存档网络),其中包含数千个库,几乎可以实现您可能想到的任何东西,而且 Perl 在文本处理方面确实非常强大。缺点是 perl 代码有点难以维护(如果你不太了解的话)。

Python 是一种脚本语言,在脚本编写者中越来越流行。它还没有像 CPAN 这样的社区,但它更具可读性,并且更易于维护。它和 perl 一样快。

Ruby 是脚本语言的最新趋势。Ruby 是完全的 OOP,这意味着一切都是对象。它的优点是代码可读性很强,如果你是初学者,它很容易学习。主要缺点是它的执行速度,有点 s*x。

于 2008-09-16T08:55:59.047 回答
1

如果你想要简约、紧凑和快速的解决方案(比 Python/Ruby 更快),那么 -> 选择 LUA 脚本语言 :-) 但是 Lua 速度和代码紧凑性是通过相对较小的 Lua 语言核心实现的,所以如果你想要“包含电池” (又名。非常大的“标准”库)那么 Lua 不适合你。否则,来自 C/C++ 世界的人非常喜欢 Lua 速度 :-)

ps

Lua vs Ruby 1.9 基准测试(您也可以查看 Lua Vs Python 3):

http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=lua&lang2=yarv

于 2010-02-19T14:59:23.780 回答
0

这取决于你正在做的自动化类型,如果它正在测试自动化建议 Perl,因为 Perl 是通过 CPAN 的强大扩展模块,一个在线 Perl 模块清单。如果只需要一个方便的工具来完成一个简单的源文件,awk 是非常方便的。如果您打算使用脚本来自动化一个大项目,那么 Perl 是一个更好的选择,它具有更多的特性。同样,Python 从一开始就被设计为一种面向对象的语言。Perl 5 添加了一些 oo 特性,但在我看来,它就像一个笨拙的改造。Python 在多重继承、多态性和封装方面具有良好实现的 oo 特性。n 总结,在我看来,Python 在大多数应用程序中占主导地位,除了相当短的 shell 脚本类型的应用程序,它们大致相当。

于 2008-09-16T08:54:13.140 回答
0

如果我必须选择一个,那必须是 AWK。它是轻量级的,学习曲线很小,并且有许多有用的功能,如索引和子字符串。

于 2008-09-16T09:39:04.920 回答
-1

取决于你想做什么,我经常使用它们:

  • 用于简单批处理命令的 Shell,可能带有循环或 if 语句。
  • Perl 当我咀嚼文件并做一些文本替换和类似的事情时。
  • Python 需要更多逻辑时。

在 *nix 下,您应该使用正确的工具来完成正确的工作,这对初学者来说可能很难,因为要学习的东西太多了(作为 *nix 用户大约 15 年之后,我仍然发现了新东西)。我的建议是快速查看所有语言,看看它们能做什么,然后在你的脚本变得笨重时将它们移到其他东西上,然后开始使用 shell。

于 2008-09-16T08:59:59.317 回答
-1

只需一个接一个地编写你的命令,把它放在一个文件中并运行这个文件

promp> bash file

你有了第一个自动化。然后了解 bash 变量、循环和控制结构。

于 2008-09-16T09:18:22.863 回答
-1

我第二次使用 Python - 与 perl 或 bash 相比,强大、简单、高性能,而且……实际上很有趣。此外,如果您知道它,您会发现其他用途,它在很多项目中都有使用。不仅仅是作为一种“经典”脚本语言,以扭曲项目为例。我猜对 Perl 也是如此,但我自己更喜欢 Python

底线虽然就像之前所说的那样,但请确保您拥有合适的工具来完成这项工作......

于 2008-09-16T09:25:17.400 回答
-1

如果你的目标是让一个简单的脚本程序“控制”另一个(当然是命令行)程序,那么你应该回顾一下 Tcl/Tk,尤其是它的方言期望——它们很简单并且面向那个目标——很容易创建一个控制 ftp 的脚本,甚至对它们执行 su!

awk 非常适合处理文本文件 - 没有 perl 强大,但更简单直接(并且没有可怕的语法)。

当然,你的里程可能会有所不同,所以我想最好的答案是问你:你想写什么脚本?然后:你熟悉任何语言脚本吗?根据每个问题的优缺点及其主要目标,这些问题的答案将为您指出应该使用的脚本语言。

于 2008-09-23T23:09:19.410 回答
-3

在 Linux 上?基本上选择你的毒药。我喜欢 Python,其他的 Ruby,还有其他的 Perl。选择一个然后去做。:-)

于 2008-09-16T08:51:43.050 回答
-3

我会说 Python - 它具有非常高的可读性,它很简单(没有大括号,关键字尽可能接近英语等),你可以在其中做几乎所有事情,从简单到非常复杂的事情。编码也很流行且很有趣。

于 2008-09-16T09:05:50.117 回答
-3

这听起来可能有点奇怪,我已经使用 bash 超过 10 年了。我已经开始使用 PHP5,一开始很困难,但现在我有了一个更好的可重用代码库。

不过我不推荐它作为起点!

于 2008-09-16T09:07:09.177 回答