如何在Unix结果中抽取想要的参数

大部分的Unix操作系统命令,其命令执行后都会输出比较详细的参数 。但是有时候系统工程师可能不需要这么详细的信息 。如date命令,其会显示时间、日期、年数等等信息 。但是系统工程师在开发一些应用程序的时候,可能只需要时间信息 。为此就需要利用一些工具从中抽取相关的参数信息 。其实不光光是在Unix系统管理中,在其他一些程序的开发平台中也会遇到这种情况 。而其他一些平台的话,他们则是通过字符串截取或者其他一些类似的方法实现 。而在Unix系统中则提供了一些比较专业的命令,用来操作位置参数 。如set和shift命令 。
在介绍这两个命令的使用要点之前,笔者先给大家看一个截图 。如下图所示,这张图就是利用set命令来来操作位置参数 。让其从date命令中抽取部分结果 。这个特性不仅可以格式化显示结果,而且在shell中开发一些应用程序将会变得很有用 。
一、set命令简介 。
在Unix系统中,set命令时一个很有用的系统命令,其可以帮助系统管理员实现很多需求,如设置环境变量等等 。在这里,其主要是用来实现这支位置参数 。其实在Unix系统中,有很多种方法可以用来实现在命令结果中抽取特定的参数 。如可以利用外部命令cut实现从一个输出结果中截取一个字段的内容 。但是,利用cut命令来实现这个功能的话,就显得有点业余了 。既然Unix操作系统提供了其他一些更加专业的命令来实现这些功能,系统工程师为什么要舍近求远呢?
其实在Unix系统中的标准shell中就提供了一些内部命令,来实现功能 。其中set命令就是比较有代表性的一个命令 。Set命令可以把参数赋值给$1、$2等位置参数 。通过情况下,如果系统工程师要从程序的输出结果中提取某些内容则往往是利用这个命令来实现 。
二、set命令的具体实现过程以及需要注意的内容 。
在谈set命令的具体实现过程之前,笔者先跟大家介绍一些位置参数与命令显示结果之间的关系 。了解他们的内在关系是系统工程师使用操作位置参数命令的前提 。如上图所示,利用date命令显示出“Mon Apr 20 08:29:40 CST 2009系统的当前时间的结果 。这个结果从左到右其对应的存储位置分别为$1、$2等等,以此类推 。也就是说,这个显示结果就好像其他开发程序中的数组,系统利用空格来区分字段,并把每个字段的内容依次存入到数组中 。不过这里需要注意的是,其他开发程序的数组往往是从0开始 。而在Unix系统中,这个位置参数则是从$1开始 。为此系统工程师如果要截取第一个字段内容的话,则应该是$1而不是$0 。笔者是先学C等开发语言平台,然后再学Unix系统 。由于有了一个先入为主的观念,为此后来在使用set命令的时候,经常犯迷糊 。故笔者提醒各位系统工程师,在这方面要特别注意显示结果内容与位置参数的对应关系,第一个字段对应的位置参数位$1 。了解了这个内容之后,则利用set命令来操纵显示结果则就比较容易了 。如上图所示,通常情况下只需要通过简单的两不就可以完成这个功能了 。
第一步:利用set命令把它的参数转换为位置参数 。
在使用这个命令之前,笔者认为系统工程师应该先明白一个道理 。就是默认情况下,命令的输出结果其往往都是显示在终端中,或者通过重定向符号显示在一个特定的文件中 。但是无论是哪一种显示方式,其往往不会跟位置参数关联起来 。如上图中,一开始运行一个date命令时,会输出相应的时间信息 。此时这个输出结果中有6个字段,但是其根本没有跟位置参数形成一一对应的关系 。其只是一个简单的字符串而已 。如果系统工程师要利用惭怍位置参数命令从这个结果冲抽取内容的话,则一定需要把命令的结果转换为位置参数 。而set命令就是用来实现这个目的的 。

推荐阅读