【发布时间】:2010-11-05 11:23:13
【问题描述】:
您更喜欢哪种语言来编写常见任务(备份、同步等)的脚本,为什么?我不是在谈论编程网页或应用程序。
在思考为什么 bash 仍然受欢迎时,我提出了这个问题。例如,Python 对我来说看起来更舒服。您是因为知道还是出于某些特殊原因才使用它?
【问题讨论】:
标签: linux bash unix scripting terminal
您更喜欢哪种语言来编写常见任务(备份、同步等)的脚本,为什么?我不是在谈论编程网页或应用程序。
在思考为什么 bash 仍然受欢迎时,我提出了这个问题。例如,Python 对我来说看起来更舒服。您是因为知道还是出于某些特殊原因才使用它?
【问题讨论】:
标签: linux bash unix scripting terminal
如果是“创建这个目录,运行这个命令,如果有效就运行这个”级别,我只使用 bash shell-scripts..
任何更复杂的东西,比如解析命令输出并对其进行操作的东西,就变成了 Python 脚本——我发现它写起来也一样快,主要是因为 shell 脚本很难调试(bash 脚本错误消息不是' t 与 Python 的回溯相比非常有用..),并且最终代码变得更具可读性
【讨论】:
...为什么 bash 仍然流行?
嗯,因为 Bourne Shell( sh ,不一定是 bash )在任何 +*n*x 安装中都几乎可用。
sh 和 vi 的良好命令在通过 telnet/ssh 连接到远程服务器时非常有用
对于本地管理员(当您拥有服务器时),您可以使用 python/perl/ruby 并随意自定义它们。但可以肯定的是,任何一天你都可能被要求“快速修复”安装了两个默认设置的其他服务器:sh+vi
这就是为什么。
【讨论】:
Unix 的哲学是使用小型工具来完成一项特定的工作并且做得很好。通常,解决问题的最简单方法是使用这些工具的组合。 Shell 脚本是这方面的王者,对此毫无疑问。
当然,还有“当你只有一把锤子”综合症:)
【讨论】:
这实际上取决于脚本的类型。我开始将 ruby 用于许多系统管理员类型的任务,但是 bash 仍然是我快速和肮脏脚本的首选。在我看来,bash 的优势在于它的交互性。
举个例子。前几天,我在大约 200 个压缩日志文件中搜索一些特定值,重新格式化输出并邮寄结果。
使用 bash 迭代地执行此操作非常容易,因此,zcat 一个文件将输出管道传输到 grep,重试几次以使正则表达式正确。然后获取该输出并使用 awk 重新格式化结果,再次重试几次以获得正确的格式。
这个过程花了几分钟时间,然后我将 bash 命令写入脚本文件,对其进行参数化,在其周围包裹一个 for 循环,将结果邮寄出去,工作就完成了。
我发现这个过程在 bash 中仅使用命令编辑和重试正则表达式等比在单独的脚本文件中要简单得多,我必须继续编辑脚本和重试等。
【讨论】:
生日,
不同的任务需要不同的语言。我倾向于使用 shell(通常是 bash)或 Perl,具体取决于任务。
现在我对 Ruby 越来越熟悉了,对于那些可能适合 OO 方法的任务,我会使用它。
HTH
干杯,
【讨论】:
Perl 最适合处理系统管理任务。我从来没有遇到过没有安装 Perl 的 *nix 系统。
【讨论】:
目前对我来说 Python,我喜欢使用 Python,因为它有一个交互式终端,我可以使用它来构建和执行脚本,但我过去使用过 perl。
【讨论】:
可以假设 Bash 或广义上的各种 sh 方言几乎存在于任何 unix 系统上。通常,生产 Unix 系统(Solaris、HP/UX、AIX 等)具有非常简单的 vanilla 安装;他们通常不会安装 perl 或 python。可能有公司政策对此进行了限制,因此安装它也可能不是一种选择。如果你想要在这种平台上运行的东西,你可能会被限制为 sh/sed/awk。
Bash 非常适合主要涉及运行其他命令的任务,因此您不应低估它。然而,它很快就变成了一种复杂程度相当低的只写语言,因此如果您正在编写具有大量内部处理的东西,Perl 或 Python 可能是更好的选择。
对于安排备份,从 cron 运行的 bash 脚本很可能是完成这项工作的最佳方式。对于涉及解析多个日志文件、将输出格式化为摘要状态文件并在发现某些类型的事件时向您发送电子邮件通知的事情,您最好使用 perl 或 python。
【讨论】:
Bash 是此类任务的首选脚本语言。它非常普遍,并且旨在成为一种粘合语言,从某种意义上说,您可以将通常在终端中执行的一系列命令粘合在一起,几乎没有变化。
【讨论】:
我的大部分 shell 脚本任务都使用 Ruby。我永远记不起 Bash 脚本的一些细微差别/陷阱。
【讨论】:
我使用 Ruby 是因为我最喜欢它。它是我发现自己为问题的逻辑而不是语言的语法或限制而苦苦挣扎的少数语言之一。将此与 C++ 或 Perl 进行比较,我对指针和符号感到沮丧。我发现在 Ruby 中递归目录遍历和运行系统命令非常容易,例如using Ruby to rename files and edit their content.
【讨论】:
我通常使用 perl。 CPAN 的模块库使许多任务变得简单。 Net::SSH 是自动化系统管理任务的绝佳工具。
【讨论】: