除了用作强大的 Web 应用程序开发平台外,通过与 Rails 框架相结合,Ruby 还具有较少被提及的另一面,那就是作为一种强大的脚本语言,就像 Python 或 Perl 那样.它拥有非常强大的功能, 可以使用很多内建的和外部的库,因此可利用它的威力来解决通常系统管理工作环境中出现的很多脚本编写需求. ,用 Ruby 编程也很有趣!
简介
Ruby 是一种功能极其丰富的、免费的、简单的、可扩展的、可移植的、面向对象的脚本编程语言.最近,它在 Web 领域广受欢迎.这在一定程度上要归因于非常强大的 Web 应用程序开发框架 Rails,Rails 正是用 Ruby 编写的.Rails,也称 Ruby on Rails(ROR),顾名思义,它为快速、有效地开发 Web 应用程序提供一个非常强大的平台.它是高度可伸缩的,Web 上有很多站点就是用 Ruby on Rails 构建的.
除了与 Rails 一起用作 Web 应用程序开发平台外,Ruby 还具有较少被提及的另一面,那就是作为一种强大的脚本编程语言,就像 Python 或 Perl 那样.它拥有非常强大的功能, 可以使用很多内建的和外部的库,因此可利用它的威力来解决通常系统管理工作环境中出现的很多脚本编程需求.
系统管理需要大量编写脚本以使事情更简单、更有效.编写脚本比单调的手动工作能更好地解决用户管理、进程管理、文件管理、软件包管理和其他基本的自动化需求.在这个场景中,Ruby 非常有用.它有一套很好的库可满足这一点.
对于本文,我假设读者具有 Ruby 的应用知识.这里提供的基本例子使用纯 Ruby,因此可以在 Ruby 支持的任何类 UNIX? 系统以及 Windows? 上运行.对于更高级的 Cfruby 例子,需要能够使用一个 UNIX 系统.下面所有的例子已经在一台 Linux? 机器上使用 Ruby v1.8.4 进行了测试.它们应该也能用于最新版本的 Ruby.
实践中的 Ruby
第一个例子在指定路径中搜索符合给定模式的文件,并以用户友好的方式给出关于这些文件的详细信息.实现这一目标不必依赖于任何命令行实用程序,只需使用 Ruby 内建的 API.因此,这个例子在有 Ruby 运行的任何平台上都能运行.
,这个例子展示了 Ruby 在简化脚本编写需求方面有多强大.它不是简单地模拟 *nix "find" 命令,而是构建在该命令之上,因而在使用 Ruby 时具有很强的定制能力.
清单 1. 在给定路径中搜索符合给定模式的模式的文件,并显示它们的详细信息
require ''find'' puts "" puts "-----------------------File Search-----------------------------------" puts "" print "Enter the search path : " searchpath = gets searchpath = searchpath.chomp puts "" print "Enter the search pattern : " pattern = gets pattern = pattern.chomp puts"----------------------------------------------------------------------" puts "Searching in " searchpath " for files matching pattern " pattern puts"----------------------------------------------------------------------" puts "" Find.find(searchpath) do |path| if FileTest.directory?(path) if File.basename(path)[0] == ?. Find.prune # Don''t look any further into this directory. else next end else if File.fnmatch(pattern,File.basename(path)) puts "Filename : " File.basename(path) s = sprintf("%o",File.stat(path).mode) print "Permissions : " puts s print "Owning uid : " puts File.stat(path).uid print "Owning gid : " puts File.stat(path).uid print "Size (bytes) : " puts File.stat(path).size puts "---------------------------------------------------" end end end
|
|