脚本替代Bash shell脚本

我刚刚迁移到UNIX工作站。 我对Bash shell脚本的记忆从学校开始已经消失,我发现语法高度混乱。 我想知道什么其他脚本语言是用来自动化任务。 我听说的两个最stream行的是Perl和Python。

  1. 哪种脚本语言被现实世界的商店使用最广泛?
  2. 哪种脚本语言最接近C / C ++语法?
  3. 有没有我不知道的另一种脚本语言?

谢谢你的帮助,

斯科特

在某种程度上,这是一个个人喜好的问题。 在stream行方面,Perl和Python绝对在那里。

但要回答三个问题中的两个,

  1. 我猜测bash是最广泛使用的,可能是perl后面。 只是猜测,不知道有没有人做过调查。 🙂
  2. 那里有几十万种脚本语言。 🙂

我的build议是Python。 读写容易,function非常强大,网上有大量有用的资源用于学习,更不用说可复制和重用的代码了。

Perl和Python是明显的答案; 但他们每个人都被用来完成不同的任务:

  1. Bash – 传递最简单的学习。 使用Bash脚本,您可以运行命令并操作输出。
  2. Python – 第二个最简单的学习。 Python比Bash更有用,因为你可以使用Python编写完整的程序,社区也可以很好地支持Python。 Python也是非常可读的,易于编辑几个月后。
  3. Perl – 三者中最好的(用于脚本),但却是最陡峭的学习曲线。 有非常好的正则expression式支持(这是它今天仍在使用的主要原因),并且随着时间的推移,您可能会碰到很多Perl脚本。 Perl的主要问题是代码可读性 – 在你编写代码几个月后,你将无法弄清楚它的function。 所以你最好评论一下。
  4. Awk / Sed – 两者都非常有用,但都很难学。 我build议最后去解决,除非你擅长模式。

关于现在学哪一个(因为你大概都不知道),我会学习Python。 这是最简单和最有用的知道。

至于你的问题的答案:

哪种脚本语言被现实世界的商店使用最广泛?

所有这些,但我想像Perl在这里有一点优势(因为它已经在系统pipe理中使用了很长时间)。

哪种脚本语言最接近C / C ++语法?

Perl的

有没有我不知道的另一种脚本语言?

Ruby,Tcsh / Csh, http://en.wikipedia.org/wiki/Interpreted_language

awk for small jobs,python for more-ineliners。

Python(如果您不使用特定的API和其他平台相关的东西)有一个丰富的“标准库”,在所有使用python版本的平台上都可用。 这是非常好的,因为您可以轻松地重新使用您的脚本,这意味着即使您更改了平台,您的知识也是一个很好的投资。

在我们公司,我们使用python进行应用程序的所有脚本,监控,…和java,而且我们在异构环境下工作得很好。

我会说perl和python可能是两个最好的select。 你可以用sed和awk做很多事情。

Sh(bourne shell),grep,awk和sed总是一件很好的事情。 如果你想要很多的文本regexing,可维护性不是那么重要(不是说这是不可能的),Perl是非常好的。 python; 如果可读性对你很重要。 我的首选是Python,但所有这些工具都适用于大多数事情。 你可能想重新考虑你的C / C ++语法要求,坚持下去不会长期帮助你。

如果你正在寻找从头开始学习的东西,最好(重新)学习bash。

除此之外,现在perl和python非常受欢迎。 我偏向Perl,但是自从Perl 4出来以后,我的perl脚本风格并没有太大的改变。

我不知道任何“c语法”的脚本语言。

Perl,如果仅仅是CPAN( http://search.cpan.org/ )的令人难以置信的资源的话。 在这样一个巨大的贡献社区中使用脚本语言的好处是,你不可能永远需要自己创造一些东西。

Perl也有这样的好处,就是像当前情况一样复杂。 您可以将其视为一种用于快速pipe理或单一目的脚本的简单脚本语言,但是当您想要创build更大,易于维护的应用程序(如守护程序,服务器,客户端)时,可以使用面向对象的概念或广泛的元对象系统。

单独的脚本语言之间的差异并不足以挑选出明显的胜利者,但是您应该首先看看您能够轻松地find关于您关心的主题的信息。

Perl语法也可以惊人地接近于C,只要你能避免input和input信息; 先进的Perl使用会自然而然的,因为你最终学习语言的优势。

而对于可读性方面的反对者:你可以用任何语言编写难以阅读的代码。 如果你从4个月前回顾你的代码,并且无法理解它,那么你做错了什么。

ps这个post里充满了CPAN上各种pipe理友好模块的链接,但显然新用户只能发布一个链接,所以使用CPAN链接来search'CVS''SVN''Cron'和'Moose'(一个广泛的对象系统)

  1. 最常用的:Perl,主要是出于历史原因。 Python在所有的Linux和BSD发行版(甚至安装在Mac OSX上)中都有广泛的应用,并且学习/编程要好得多。 当然,一旦你获得了语法,Bash几乎可以在命令行中做任何事情。 毕竟,这命令行。

    • C语法:有csh ,但是你可以很容易地安装TCC,并使用真正的 C语言作为脚本语言,在比其他语言启动的时间less的时间内从源代码编译。

    • 其他脚本语言:很多! Lua , Ruby ,JavaScript …

你应该使用所有合适的组合。 我真的不喜欢perl(可读性),但它对很多事情都有好处。 另一方面,在系统pipe理方面,Python对我来说是一个新东西,直到我不得不pipe理(而且还有)几个KVM机器。 在用libvirt的python绑定搞乱了1个小时后,启动,停止,保存,加载和通过脚本迁移所有这些机器变成了现实。

最后但并非最不重要我不会使用perl或python,如果我必须,每天晚上(每个数据库在它自己的转储文件)转储所有数据库从一个MySQL服务器,tar他们和rsync到其他服务器。 为什么? 因为它更快,更容易写在bash 🙂

最后,你应该使用任何适合你当前任务的语言,而不要仅仅因为你最喜欢使用给定的脚本语言。

我喜欢ruby。 编程简单易行。 有一本关于使用ruby进行系统pipe理的优秀书籍。

Ruby被用于几个configurationpipe理系统(capistrano,chef,puppet)和metasploit的最后一个版本。

你可以使用rush来代替Unix shell和ruby语法,像这样做:

 local = Rush::Box.new('localhost') remote = Rush::Box.new('my.remote.server.com') local_dir = local['/Users/adam/myproj/'] remote_dir = remote['/home/myproj/app/'] local_dir.copy_to remote_dir remote_dir['**/.svn/'].each { |d| d.destroy } 
  • ruby
  • python
  • 去 – 一个跨平台的语言,脚本被认为是Go的优势之一 。
  • Node.js – 参见Grunt.js,Gulp.js. 现在许多项目都使用Node.js作为shell自动化工具。
  • Perl的

[对于一般的脚本build议,请参阅其他答案]

这个答案是关于使用命令行程序,还有它们的大型链接。

为了运行CLI程序链,也许有很多连锁链,bash是最简单的。 Perl 也可以做同样的事情,但是这门语言难学,而且要复杂得多,正如许多人指出的那样,编写可理解的Perl很容易。

如果你正在遍历文件和参数,bash是最简单的,你可以在shell中进行原型开发,然后复制到一个脚本中,并以最小的开销添加一些数组和循环。

我的意思是:

 $ cat input.dat | numerical_model source_data ${SRC} grid_size ${GRID_SIZE} param1 ${P1} param2 ${P2} | tee ${OUTPUT} | plotter title ${TITLE} ylabel ${YLABEL} xlabel ${XLABEL} > ${OUTPUT_FIG} $ cat ${OUTPUT} | stats_cmd bin_size ${BINSIZE} dist_type ${DIST_TYPE} | tee ${OUTPUT_STATS} | plotter plot_type ${PLOT_TYPE} title ${TITLE_STATS} > ${OUTPUT_FIG_STATS} 

在bash中,很容易将这些参数封装在一些循环中。 然而 ,一旦脚本超过几十行,代码变得难以阅读。 —为30个不同的数据图设想30组命令(每行几行)—

对于大型脚本,Perl和Python可能会更好,因为它们对于循环和variables有更清晰的语法,但是bash命令必须以stringforms生成,作为subprocess运行,捕获stdin和stdout。 它可以完成,但它不能完全取代本地shell环境。

如果贝壳有更好的语言,这一切都将被避免。