2024年6月12日发(作者:)

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,取第二个参数替换$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 执行结果