二、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命令就是用来实现这个目的的。
如利用set ‘date’命令,就可以利用把它的参数结果转化为位置参数。如此设置之后,在显示的结果中系统就会把第一个字段赋值给位置参数$1,第二个字段赋值给位置参数$2,依次类推。在这里笔者再强调一次,第一个位置参数为$1,而不是$0。因为笔者以前犯这个错误犯怕了,所以在这里不厌其烦的强调这个内容,希望能够引起大家的重视。
第二步:利用echo命令来显示位置参数所代表的内容。
把位置参数与输出结果一一对应之后,系统工程师就可以利用echo命令或者在应用程序中直接引用位置参数从某个命令的输出结果中截取相关的内容。通常情况下,系统工程师可以一次抽取一个字段,也可以一次抽取多个字段。而且难能可贵的是,命令中还可以使用通配符。如果系统工程师需要显示所有位置参数所对应的内容,也就是原有命令显示的结果,则可以利用echo $*来实现。通配符*号就表示所有的位置参数。不过需要注意的是,在引用位置参数的时候,要把前面的$美元符号加上去。即echo $1 与echo 1会显示两个不同的结果。前者就是位置参数$1所代表的字段内容;而后者直接显示为1。因为1不是有效的位置参数,而只是把它当作一个简单的字符来处理。