我刚刚迁移到UNIX工作站。 我对Bash shell脚本的记忆从学校开始已经消失,我发现语法高度混乱。 我想知道什么其他脚本语言是用来自动化任务。 我听说的两个最stream行的是Perl和Python。
谢谢你的帮助,
斯科特
在某种程度上,这是一个个人喜好的问题。 在stream行方面,Perl和Python绝对在那里。
但要回答三个问题中的两个,
我的build议是Python。 读写容易,function非常强大,网上有大量有用的资源用于学习,更不用说可复制和重用的代码了。
Perl和Python是明显的答案; 但他们每个人都被用来完成不同的任务:
关于现在学哪一个(因为你大概都不知道),我会学习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'(一个广泛的对象系统)
最常用的: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 }
[对于一般的脚本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环境。
如果贝壳有更好的语言,这一切都将被避免。