在任何一种开发语言中,变量都是不能缺少的一项内容。在Unix操作系统中,也有变量一说。系统工程师在编写脚本程序或者书写命令时,都可以使用变量。笔者现在就跟大家谈谈在Unix操作系统中如何使用变量,在什么情况下使用变量等问题。
一、变量的定义注意事项。
在Unix操作系统中定义变量比其他语言要简单的多。因为其他语言使用变量的话要预先声明,而在Unix操作系统中则不用。而且在Unix操作系统中定义变量时也不用注明其采用的是什么数据类型。系统会自动根据输入的内容来进行判断。所以使用起来非常的方便。如现在用户需要定义一个整数型的变量,只需要采用如下的格式即可:int1=1981。注意,此时虽然给变量赋值的是一个整数,但是其是以字符串的形式存放。也就是说,当目前为止,所有的Unix系统变量都是字符型的变量。或许这种情况在以后版本的操作系统中会改变。但是到目前为止,所有的shell变量都是字符型变量。这是系统工程师在使用变量的时候,必须要牢记的一个原则。
不过在定义变量的时候,笔者建议各位读者要遵守如下的规范。
一是要注意变量的大小写。虽然Unix系统中对于变量的大小写没有特殊的要求,无论大写还是小写都是可行的。但是在业内确有一套不成文的规则。即操作系统和软件开发工具包使用的变量名都是采用大写的英文字母表示。而在用户的脚本程序中使用的变量最好都用小写字符表示。这主要是从变量的阅读性上考虑的。将用户自定义的变量同系统变量区分开来。如操作系统中的PATH等环节变量名字都是小写的。这虽然不是一个强制性的规范,但是笔者希望各位读者还是能够遵守这个规范。
二是在变量进行初始化的时候,还有一个格式的要求。如在C shell中,既有一个比较严格的要求。如上面这个定义中,=左右两边都没有采用空格。如果用户想在左边采用一个空格的话,那么在等号右边也必须使用一个空格。即左右两边都必须对称。否则的话,系统将无法识别这个变量。有些工程师可能有其他语言编程的经验,他们在这方面没有这么苛刻的要求。但是如果在Unix操作系统中采用变量的话,这个规则必须要遵守,即变量赋值时等号两侧要么一个空格都没有,要么都必须加上空格。
三是要注意在Unix操作系统中没有常量的概念,而只有只读变量的概念。其实两个道理是相通的,只是名字叫法不同而已。如果系统工程师需要定义一个只读的变量,那么只需要在变量前面加入一个关键字readonly即可。加入这个关键字之后,用户就可以防止这个变量被修改。注意此时连创建这个变量的用户都无法修改变量。其实,此时这个变量已经变为了常量。除非用户先利用unset关键字显将这个只读变量删除,然后再重新建立。否则的话,只读变量建立后,不能够再进行修改,包括变量的主人在内。
第四在Unix操作系统中,变量的引用对于其他语言也有所不同。无论是系统变量,还是用户变量,在引用变量时都需要在变量名前面加入一个特殊的元字符即$。只有加上这个元字符后,系统才会认为这是一个变量。如需要将上面建立的这个变量的值赋值给另外一个变量,必须使用如下的格式:int2=$int1。当利用echo命令来显示用户变量与环境变量时,也必须采用这个格式,如echo $PATH等等。
#p#二、在哪些情况下该使用变量?
并不是在任何情况下使用变量都能够起到应有的效果。笔者认为,在Unix操作系统中使用变量,无非有两个用途。一是方便用户的操作,二是提高脚本程序的重用性。具体来说,笔者认为在如下情况下使用变量可以起到不错的效果。
1、 利用变量来连接字符串。
在某些情况下,系统工程师经常需要将某个变量与另外的一个变量或者字符串连接起来。如更改文件的扩展名就是一个最好的例子。如现在某个目录下有很多脚本程序,可惜都是以txt为扩展名的。现在用户想将这些文件都转换为以sh为扩展名。如果想通过命令来实现更改的话,就需要使用变量。具体的实现原理时,先是用系统命令将原先的文件名分为两部分,或者说,将原先的文件名去掉扩展名后赋值给变量filename。然后再将这个变量$filename与扩展名sh(可以将字符串sh也赋值给另外的一个变量如sh1)连接起来。则最后可以使用命令fullname=$filename$sh1的形式更改扩展名。如果想一次性完成的话,那么再搭配一个循环语句即可。
如果变量用来连接变量或者字符串时,笔者有些内容要提醒各位读者。当将变量与字符串连接时,有时候需要使用单引号。如上面这个更改扩展名的案例中,如果扩展名不采用变量的形式来表示,而直接以sh来表示的话,那么最好能够使用单引号来表示,如命令可以改写为fullname=$filename’sh’。因为在变量$filename中,已经有了表示扩展名的.号,所以在扩展名中就不用.号了。但是如果在$filename这个变量中没有点号的话,那么就需要在字符串中加入.号。此时命令要改写为fullname=$filename’.sh’。加入引号主要是出于可读性考虑的。不过在有些特殊的情况下,必须要采用引号。如想在原先的文件名字后面(利用变量$filename表示)都加入一个007的后缀,则必须采用单引号。这个是强制的规则。在平时使用变量的过程中,除了可以使用单引号来增加可读性之外,还可以使用花括号来增加可读性。如上面的命令如果使用花括号的话,可以改写为fullname=${filename}sh。注意不能够将$符号防止在括号里面。当对是否需要采用单引号没有强硬要求的情况下,工程师可以根据自己的喜好来选择是采用单引号呢还是使用花括号。两者没有区别。
另外利用变量来连接字符串,除了更改扩展名外还有一个重要的应用就是给系统变量PATH赋值。如在Unix系统中安装了JDK应用程序,那么就必须为JDK应用程序在PATH变量中制定路径。否则的话,JDK应用程序无法执行。此时可以使用命令PATH=$PATH:/jave(假设/java是JDK应用程序的安装路径)。注意此时在变量与字符串之间必须加入一个:号。如果各位读者不要误解,这并不是变量与字符串连接时用到的连接符。从上面的案例中可以看到,当一个变量与一个字符串连接时,并不需要连接符。而这个:符号是环境变量PATH自身的分隔符,跟这个变量的连接无关。不过为了提高这个命令的可读性,笔者建议将这个命令改写为PATH=${PATH}:/jave。
2、 简化路径的设置。
当工程师查看其他人写的脚本程序时,往往会发现在脚本程序的开头,往往会定义几个变量。其中有一个变量的用途就是用来制定脚本程序的启动位置。如系统工程师可以订一个变量,direchome=’/home/oracle/oracledabase’。如在这个命令下有很多的脚本程序。除非将这个目录加入到PATH环境变量中,否则的话如果需要执行这个脚本程序就需要输入完整的路径名或者进入到这个目录中。显然这比较麻烦。当这个路径比较长时,进入到这个目录可比较费力。此时工程师就可以按照上面这种方式,将路径名赋值给一个变量。然后在需要用到这个变量下的脚本程序时,可以使用$direchome/脚本程序名的方式来调用。或者先使用cd $direchome命令进入到这个命令,然后再启动某个脚本程序。
这不仅方便了脚本程序的调用,而且也提高了灵活性。如以后脚本程序的位置发生了改变,那么之需要更改这个变量的值即可,其他语句不用进行更改。另外在一些脚本程序的命令中也可以使用变量来提高脚本程序的重用性。如可以使用tr字符替换命令来设计一个简单的文件加密程序。在这个tr命令中,需要使用两个参数。为此系统工程师可以将这个两个参数使用两个变量来表示。以后如果字符对应的规则改变了,那么只需要更改这两个变量的值即可。而不用更改脚本程序中的代码。
最后需要提醒的一句是,如果将变量放置在单引号内,那么这个变量会被当作普通字符来对带。但是如果将其放置在双引号内,则仍然会被当作变量来处理。这是单引号与双引号在Unix操作系统中差异所造成的。
【编辑推荐】