Linux Shell 脚本:使用 Shell 变量
本章,我们将学习在类 Unix 系统中如何使用变量。一个变量是一个字符串定义,它可以被你赋值,赋值可以是一个数值,一段文本,文件名,设备或任何其它类型的数据。
一个变量不会比一个类似指针指向实际的内容具有更多的功能。外壳程序允许你创建,赋值,或删除变量。
变量名
一个字符串代表变量名,它的规则是只能包含大小写字母(a 到 z 或 A 到 Z),数字(0 到 9)或者下划线( _ )。
约定俗成, Unix 外壳程序自身的变量名将为全大写形式。
下面是有效的变量名定义 −
_ALI
TOKEN_A
VAR_1
VAR_2
下面是无效的变量名定义 −
2_VAR
-VARIABLE
VAR1-VAR2
VAR_A!
原因是变量名不能包含诸如 !,* 或 - 等对外壳程序有特殊含义的字符。
定义变量
用以下形式定义变量:
variable_name=variable_value
举例:
NAME="Zara Ali"
如上形式命令定义一个名为 NAME 的变量,并赋值为 "Zara Ali"。这种类型变量被称为 可变化标量(scalar variables)。其一次只能保存一个值。
外壳程序允许变量保存任意类型数据,举例:
VAR1="Zara Ali"
VAR2=100
访问变量值
访问保存在变量中的具体数据,在变量名前加 $ 符前缀。
举例,下面的脚本将获取 NAME 变量中保存的数据,并将其显示输出到标准输出(STDOUT)。
#!/bin/sh
NAME="Zara Ali"
echo $NAME
上述脚本将会输出如下内容:
Zara Ali
只读变量
外壳提供一种只读命令方法(readonly)标识变量为只读变量。当变量指定为只读,其值不可再更改。
举例,下面的脚本试图给指定为只读的变量重新赋值将产生一个错误提示。
#!/bin/sh
NAME="Zara Ali"
readonly NAME
NAME="Qadiri"
如上脚本运行时将产生如下输出:
/bin/sh: NAME: This variable is read only.
取消设置变量
取消设置或删除变量将使外壳程序直接移除对变量的跟踪保持。一旦取消设置一个变量,将不能再访问存储在变量中的值。
使用 unset 命令语法取消设置一个已定义的变量。
unset variable_name
以上命令取消设置已定义的变量,下面是其如何工作的简单例子。
#!/bin/sh
NAME="Zara Ali"
unset NAME
echo $NAME
如上的例子,运行脚本不会输出任何内容。注意,你不能使用 unset 命令取消设置一个标识为 只读(readonly) 的变量。
变量作用范围类型
当一个外壳实例或脚本运行时,提供三种变量作用范围类型:
-
局部变量(Local Variables) − 局部变量只在当前运行外壳实例中有效。它并不会在启动脚本的外壳程序实例中有效。它们通常在命令行提示符下设置。
-
环境变量(Environment Variables) − 一个外壳环境变量,对外壳实例的所有子进程都有效。许多脚本程序需要环境变量设置使其正确运行。通常,一个外壳脚本仅定义使其正确运行所必需的环境变量。
-
外壳变量(Shell Variables) − 一个外壳变量是在外壳脚本中定义的特有变量,保证脚本的正确执行。其中一些是环境变量,另一些是局部变量。
推荐文章: