首选终端脚本语言

时间:2009-06-24 10:43:26

标签: linux bash unix scripting terminal

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

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

13 个答案:

答案 0 :(得分:4)

如果是“创建此目录,请运行此命令,如果可行,请运行此”-level,我只使用bash shell-scripts ..

任何更复杂的东西,说出解析命令输出并对其进行操作的东西,都会变成Python脚本 - 我觉得它写得很快,主要是因为shell脚本难以调试(bash脚本错误消息不是'与Python的追溯相比,它非常有用..),最终代码变得更具可读性

答案 1 :(得分:4)

  

...为什么bash仍然很受欢迎?

好吧,因为Bourne Shell(sh,而不一定是bash)几乎可以在任何+ * n * x安装中使用。

通过telnet / ssh

连接到远程服务器时,sh和vi的良好命令非常有用

对于本地管理员(当您拥有服务器时),您可以使用python / perl / ruby​​并根据您的意愿自定义它们。但大多数情况下,任何一天都可以要求您“快速修复”安装了两个默认设置的其他服务器: sh + vi

这就是原因。

答案 2 :(得分:3)

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

当然,还有“你所拥有的只是锤子”综合症:)

答案 3 :(得分:3)

这实际上取决于脚本的类型。我开始将ruby用于许多系统管理员类型的任务,但是bash仍然是我快速和脏脚本的首选。在我看来,bash的优势在于它的互动性。

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

使用bash迭代地执行此操作非常容易,因此,zcat将一个文件输出到grep,重试几次以使正则表达式正确。然后获取该输出并使用awk重新格式化结果,再次重试几次以使格式正确。

这个过程耗时几分钟,之后我将bash命令写入一个脚本文件,对其进行了参数化,并围绕它进行了for循环,邮寄结果并完成了工作。

我发现这个过程在bash中使用命令编辑和重试正则表达式等比在单独的脚本文件中更简单,我必须继续编辑脚本并重试等。

答案 4 :(得分:1)

天儿真好,

不同的任务需要不同的语言。我倾向于使用shell,通常是bash,或者根据任务使用Perl。

现在我对Ruby越来越熟悉,对于那些可能适合OO方法的任务,我会用它。

HTH

欢呼,

答案 5 :(得分:1)

Perl最适合处理系统管理任务。我从未遇到过没有安装Perl的* nix系统。

答案 6 :(得分:1)

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

答案 7 :(得分:1)

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

Bash非常适合主要涉及运行其他命令的任务,所以你不应该低估它。但是,它很快就会变成一种只有复杂程度的只写语言,所以如果你用很多内部处理编程,Perl或Python可能是更好的选择。

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

答案 8 :(得分:0)

Bash是这类任务的首选脚本语言。它非常普遍,它的目的是成为一种粘合语言,在某种意义上说,你可以将通常在终端中执行的一系列命令粘合在一起,几乎没有变化。

答案 9 :(得分:0)

我将Ruby用于大多数shell脚本编写任务。我永远不会记得Bash脚本的一些原因/陷阱。

答案 10 :(得分:0)

我使用Ruby因为我最舒服。这是我发现自己在解决问题逻辑的几种语言中的一种,而不是语言的语法或限制。将此与C ++或Perl相比较,我对指针和符号感到沮丧。我发现在Ruby中很容易做到递归目录遍历和运行系统命令,例如using Ruby to rename files and edit their content

答案 11 :(得分:0)

我通常使用perl。 CPAN的模块库使许多任务变得简单。 Net :: SSH是自动执行系统管理任务的绝佳工具。

答案 12 :(得分:0)

在使用不同版本的Linux和BSD后,我倾向于使用Bash或Korn Shell进行原型设计,然后转换为Bourne Shell以实现可移植性。我从未失败过。