跟其他的高级开发语言一样,Linux Shell编程中使用的数据也需要保存在变量中。
Shell使用变量来控制其行为,并且可以通过更改变量值来更改Shell和其他程序的行为。
我们先来了解一下变量命令的规则、变量类型和使用变量时要注意的事项。
一、变量命名规则
Linux Shell编程中使用的变量,其命名必须遵循如下这些规则:
1.变量名只能使用英文字母,数字和下划线,且不能以数字开头。
2.变量名不能有空格。
3.变量名不能使用标点符号。
4.不能使用shell里的关键字(可用help命令查看保留关键字)。
按照上面的规则,变量名ab8_、a_b8、_ab8都是合格的变量名,而8ab_是不合格的变量名。
二、变量的类型
运行shell脚本时,会同时存在三种变量:
(一)环境变量
环境变量是在整个系统范围内可用的变量,并由所有衍生的子进程和外壳程序继承。所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。
必要的时候shell脚本也可以定义环境变量。
按照约定,环境变量应具有大写名称。
例如我们在之前使用过的变量SHELL。
(二)局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
(三)shell变量
shell变量是由shell的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。
三、使用变量时要注意的事项
(一)shell中使用变量前通常不需要事先为变量作出声明,只是在使用变量时(通常是赋初始值时)来创建它们。
例如:
user@host: ~ # var1=1
user@host: ~ # echo $var1
1
其中:
var1=1 是声明变量var1并初始化其值为1
echo $var1 是显示变理var1的值。
(二)在给变量赋值时,变量名和赋值号(=)之间不能有空格。
例如:
user@host: ~ # var2 = 2
未找到 'var2' 命令,您要输入的是否是:
命令 'par2' 来自于包 'par2' (universe)
var2:未找到命令
由于 var2 = 2 中的赋值号=前后有空格,因此对shell来说,这条命令的功能并不是声明变量var2并初始化其值为2。
(三)Linux是一个区分大小写的系统,所以Shell中的变量名称区也分大小写,比如var1、Var1与 VAR1是三个不同的变量名。
user@host: ~ # var1=1
user@host: ~ # echo $var1
1
user@host: ~ # echo $Var1
user@host: ~ # echo $VAR1
user@host: ~ #
在上面的例子中,我们声明了变量var1并初始化其值为1,并没有声明变量Var1、VAR1和赋值,所以 echo $Var1 和 echo $VAR1没有显示他们的值。
四、 shell里的关键字
为了方便我们定义变量,我们还需要了解shell里的关键字。
查询shell里的关键字的方法有很多。例如,我们可以使用命令 compgen -k 来查看shell的关键字:
user@host: ~ # compgen -k
if
then
else
elif
fi
case
esac
for
select
while
until
do
done
in
function
time
{
}
!
[[
]]
coproc
user@host: ~ #