2009-06-24 68 views
3

您喜欢为常见任务编写脚本(备份,同步等)的语言,为什么?我不是在谈论编程网页或应用程序。首选终端脚本语言

我在思考为什么bash仍然很受欢迎时提出了这个问题。例如,Python对我来说看起来更舒适。你只是因为你知道它或出于某些特殊原因而使用它?

回答

4

如果是“创建这个目录,运行这个命令,如果有效的话,运行这个”-level,我只是使用bash shell脚本..

任何比较复杂的东西,比如分析命令的输出并对其执行操作,会变成一个Python脚本 - 我发现它的编写速度很快,主要是因为shell脚本很难调试(bash脚本错误消息aren与Python的回溯相比,它确实有用..),并且结束代码变得更可读

3

Unix有一个小工具的理念,它可以完成一项特定的工作,并且做得很好。通常解决问题的最简单方法是使用这些工具的组合。壳牌脚本是这方面的王者,对此毫无疑问。

当然,另外还有“当你只有一把锤子”综合症:)

1

天儿真好,

不同的任务需要不同的语言。我倾向于使用shell,通常是bash,或Perl,具体取决于任务。

现在我对Ruby更加适应,对于那些可能适合面向对象方法的任务,我会使用它。

HTH

欢呼声,

3

这真的取决于脚本的类型。我开始为许多系统管理员类型的任务使用红宝石,但bash仍然是我快速和肮脏的脚本的第一选择。在我看来,bash的优势在于它的互动性。

举个例子。有一天,我在大约200个压缩的日志文件中搜索一些特定的值,重新格式化输出并邮寄结果。

这是非常容易使用bash来迭代地做到这一点,因此,zcat一个文件将输出管道输送到grep,重试几次以获得正确的正则表达式。然后,使用awk重新输出并重新格式化结果,再次重试几次以获得正确的格式。

这个过程花了几分钟时间后,我将bash命令写入脚本文件,对它进行参数化,对它进行循环包装,发送结果并完成作业。

,我觉得这个过程在bash简单得多只是用命令编辑和重试的正则表达式等,比我会在一个单独的脚本文件,其中我要保持编辑脚本和重试等

1

Perl的将是最好的处理系统管理任务。我从来没有遇到过没有安装Perl的* nix系统。

1

Python对于我来说目前我喜欢使用python,因为它有一个交互式终端,我可以使用它来构建和执行脚本 - 但我过去使用过perl。

0

Bash是这类任务的首选脚本语言。它非常普遍,它的目的是成为一种粘合剂语言,因为您可以将通常在终端中执行的一系列命令粘合在一起,几乎不变。

0

我对大部分shell脚本任务都使用Ruby。我永远不会记得Bash脚本的一些细微差别/陷阱。

1

Bash或广义上的各种sh方言可以假定为几乎任何unix系统上都存在。通常,生产Unix系统(Solaris,HP/UX,AIX等)的安装非常简单,通常他们不会安装perl或python。可能有公司政策限制这一点,因此安装它也可能不是一个选项。如果你想要在这种类型的平台上工作的东西,你可能会被限制为sh/sed/awk。

Bash对于主要涉及运行其他命令的任务来说相当不错,因此您不应该低估它。但是,它很快就变成了一个只写的语言,其复杂程度相当琐碎,因此如果您正在编写一些内部处理很多的东西,那么Perl或Python可能是更好的选择。

对于安排备份,从cron运行的bash脚本很可能是完成这项工作的最佳方式。对于涉及解析多个日志文件的内容,将输出格式化为摘要状态文件并在发现某些类型的事件时向您发送电子邮件通知,那么使用perl或python可能会更好。

4

...为什么bash仍然流行?

那么,因为Bourne Shell(sh,而不一定是bash)在任何+ * n * x安装中都可用。

的SH和良好的命令vi其连接到通过Telnet/SSH

远程服务器对于本地管理员(当你自己的服务器),你可以使用Python/Perl的/红宝石和定制他们的时候非常有帮助你将。但肯定的是,您可能会被要求“快速修复”安装了这两个默认设置的其他服务器:sh + vi

这就是为什么。

0

我使用红宝石,因为我最舒服。它是我发现自己正在努力解决问题的逻辑的少数语言之一,而不是语言的语法或限制。将它与C++或Perl进行比较,其中我对指针和标记感到沮丧。我发现在Ruby中很容易实现递归目录遍历和运行系统命令,例如using Ruby to rename files and edit their content

0

我通常使用perl。 CPAN中的模块库使许多任务变得简单。 Net :: SSH是实现系统管理任务自动化的强大工具。

0

在使用不同风格的Linux和BSD之后,我倾向于在Bash或Korn Shell中创建原型,然后转换为Bourne Shell进行移植。从来没有让我失望。