Linux  Shell变量
Linux的shell编程是一种非常成熟的编程语言,它支持各种类型的变量,主要有三种变量类型,即用户变量、内部变量及环境变量。
用户变量是在编写shell 脚本时定义的,可以在shell程序内任意使用和修改它们。内部变量是由系统提供的,与环境变量不同,但用户不能修改它们。环境变量是系统环境的一部分,不必去定义它们。可以在shell程序中使用它们,某些变量(如PATH)还能在shell中加以修改。
shell编程与其他语言的主要不同之处是,在shell编程中,变量是非类型性质的。也就是说,不必指定变量是数字还是字符串。
1.用户变量
用户定义的变量是最普通的shell 变量。变量名是以字母或下线符开头的字母、数字及下线符序列,并且大小写字母意义不同。例如,dir与Dir是两个不同的变量名。变量名的长度不受限制。
给变量赋值的过程也是声明一个变量的过程。变量的赋值很简单。语法格式如下所示:
变量名=字符串/数字
在赋值号两边没有空格;在赋给变量的值中含有空格、制表符或换行符,要用双引号把这个字符串括起来;在同一个变量中,可以一次存放整型值,另一次也可以存放字符串。下面分别给三上变量赋值,代码如下所示:
a=0
b=wangtong
c="li dong"
如果要访问变量,可以通过给变量名加上前缀$(美元符)来访问变量的值。也就是说,假设变量名为myname,那么使用$myname 就可以访问这个变量。如果要把 myname 的值分配给变量yourname,那么可以执行下面的命令:
yourname=$myname
2.内部变量
内部变量是Linux所提供的一种特殊类型的变量。这类变量在程序中用来做出判断。在shell程序内,这类变量的值是不能修改的,部分内部变量如下。
$#  传送给shell程序的位置参数的数量。
$?  最后命令的完成码或者在shell 程序内部执行的shell 程序(返回值)。
$0  shell程序的名称。
$*  调用shell程序时所传送的全部参数组成的单字符串。
下面创建一个实例,来说明内部变量的使用。脚本名称为test,代码如图10-4所示。
在上述代码中,共输出三行。其中,第三行输出传递的参数个数;第四行输入实例的名称,第五行输出的是传递的参数值。
如果要执行test脚本,首先在单击系统面板上的【应用程序】菜单,执行【附件】|【终端】命令,打开【终端】窗口。然后在【终端】窗口中,输入“. Look/test wang xiao bo”命令并按键,执行shell脚本,如图10-5所示。
 
图10-4  test实例                    图10-5  执行结果
3.环境变量
在用户注册过程(会话的建立过程)中,系统需要做的一件事就是建立用户环境。所有的Linux进程都各自独立,并且不同于程序本身的环境。Linux环境(也称为shell环境)由许多变量及这些变量的值组成。由这些变量和变量的值决定环观。这些变量就是环境变量。
shell环境变量名由大写字母或数字组成。有许多变量是在注册过程中定义的,一些为只读变量,意味着不能改变这些变量;而另外一些为非只读变量,可以由你随意增加或修改。下面简单介绍主要环境变量的使用:
HOME  用户目录的全路径名。主目录是用户开始工作的位置。在一般情况下,如果用户的注册名为exuser,则HOME 的值为/home/exuser。不管用户的当前路径在哪里,都可以通过“cd $HOME”命令返回到主目录或更简单地使用不带参数的cd 命令也能达到同样的效果。
LOGNAME  用户的注册名,由Linux 自动设置。它是系统与用户交互的名字或字符串。
MAIL  用户系统信箱的路径。无论何时邮件到达用户的系统中,它都会存在该变量指定的文件中。用户可以通过定时查询这个文件最近更新的时间来判断是否有新邮件到达。在一般情况下,如用户的注册名为pb,则MAIL 的值为/var/spool/mail/pb。
PATH  shell 从中查命令的目录列表。这是一个非常重要的shell 变量。PATH 变量包
含带冒号分界符的字符串。这些字符串指向含有用户所使用命令的目录。用户可以设置它,而且其中的字符串顺序决定了先从哪个目录查。
PS1  shell 的主提示符。主提示符是在shell 准备接受命令时显示的字符串。PS1 定义用户的主提示符是如何构成的。
PWD  用户当前工作目录的路径。它指出用户目前在Linux 文件系统中处在什么位置,是由Linux 自动设置的。
SHELL  用户当前使用的shell。它也指出用户shell 解释程序放在什么地方。
TERM  用户终端类型。DEC 公司制定的vt-100 终端的特性,被许多厂商接受,也被许多终端软件仿真,成为广泛使用的标准设置。
4.位置参数
位置参数是一种在调用shell的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。位置参数之间用空格分隔,shell取第一个位置参数替换程序文件中的$1,取第二shell代码
个参数替换$2,依次类推。$0是一个特殊的变量,其内容是当前shell程序的文件名,所以,$0不是一个位置参数,在显示当前所有的位置参数时是不包括$0的。
位置参数及引用
可以编写一个shell脚本,当从命令行或者从其他shell 脚本中调用它时,这个脚本可以接收若干参数。这些选项是通过Linux 作为位置参数(positional parameter)提供给shell 脚本的。在shell 脚本中应有变量,接收实参。这类变量的名称很特别,分别是1,2,3,…。这类变量被称为位置变量。位置参数1存放在位置变量1中,位置参数2存放在位置变量2中,……,在程序中可以使用$1,$2,……来访问,依次类推。
用set命令为位置参数赋值
在shell程序中,可以利用set 命令为位置参数赋值或重新赋值。set命令的语法格式如下所示:
语法格式:
set [参数表]
该命令后面无参数时,将显示系统中的系统变量值;如果有参数,将分别给位置参数赋值。
位置参数移动
当位置变量个数超出9个时,就不能直接引用位置大于9 的位置变量了,必须用shift 命令移动位置参数。shift命令语法格式如下所示:
shift [n]
每次执行时,把位置参数向左移动n位。如果没有参数,则每次执行时,把位置参数向左移动1位。下面创建一个使用shift命令的实例,内容如图10-6所示。
在上图代码中,共使用shift命令移动了三次位置并输出每次移动后的参数。如果要执行test1脚本,首先在单击系统面板上的【应用程序】菜单,执行【附件】|【终端】命令,打开【终端】窗口。
然后在【终端】窗口中,输入“. Look/test1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16”命令并按键,执行shell脚本,如图10-7所示。
图10-6  test1文件                  图10-7  执行结果

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。