系统局部变量和全局变量
一、变量分类
局部变量和环境变量,局部变量只适用于当前shell,而环境变量是全局的,它适用于所有当前shell以及其派生出来的任意子进程,有些变量是用户创建的,其他的则是专用的shell变量。
二、局部变量
局部变量的作用域被限定在创建它们的shell中。local函数可以用来创建局部变量,但仅限于函数内使用。局部变量可以通过简单的赋予它一个值或一个变量名来设置,用declare内置函数来设置,或者省略也可。
格式:
变量名=值
declare 变量名=值
以下来示范一个局部变量的例子:
[root@weivid ~]# echo $$ #shell的ID号
8836
[root@weivid ~]# var=world
[root@weivid ~]# echo $var #打印变量
world
当使用bash重新开启一个子shell时,再次调用var变量,系统会找不到变量的值,例如:
[root@weivid ~]# bash #重新开启一个shell ID号
[root@weivid ~]# echo $$
8920
[root@weivid ~]# echo $var
#没有变量值
[root@weivid ~]
如果退出子shell时,bash,在重新打印var,又会有原来的值,并且父shell ID号还是原来的bash。
[root@weivid ~]# exit
exit
[root@weivid ~]# echo $$
8836
[root@weivid ~]# echo $var
world
所以,当创建一个子shell时,在父shell中创建的临时变量var,在子shell中无法调用。这里创建的变量var即为局部变量。
此外,还有一点需要说明的是,当开启子shell时,大部分的自己申明的命令都不能使用,必须重新source /home/用户名/.bashrc文件才能重新使用自定义的变量名。
三、环境变量(全局变量)
1. 环境变量的声明方式
环境变量通常又称全局变量,以区别于局部变量,通常,环境变量应该大写,环境变量是已经用export内置命令导出的变量。子shell继承当前父shell的环境变量,并能一直传承下去,但是不可逆向传递。
格式:
1. export 变量=值
2. declare -x 变量=值
举个例子:
[root@weivid ~]# echo $PATH_WW
/home/weivid
[root@weivid ~]# echo $$
8836
[root@weivid ~]# bash #创建一个子shell
[root@weivid ~]# echo $$
8958
[root@weivid ~]# echo $PATH_WW #打印全局变量
/home/weivid
当我们在z子shell中创建全局变量时:
[root@weivid ~]# echo $$
8958
[root@weivid ~]# declare -x NAME=”strong_man”
[root@weivid ~]# echo $NAME
strong_man
[root@weivid ~]# exit
exit
[root@weivid ~]# echo $$
8836
[root@weivid ~]# echo $NAME
#打印无,原因,在父shell中没有定义NAME变量,子shell不会传递到父shell中
因此,在父shell中定义的PATH_WW和NAME环境变量传递到了子shell中,在子shell中定义的环境变量没有被带到父shell中。
2. 环境变量的分类
永久环境变量和临时环境变量
a. 永久的:需要b修改配置文件,export变量永久生效。
b. 临时的:使用export命令行声明即可,变量在关闭shell时失效。
三、变量的设置方法
1. 方法一:在/etc/profile文件中添加变量【对所有用户生效(永久的)】
用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。
例如:编辑/etc/profile文件,添加CLASSPATH变量
在终端中打开该路径下的文件:
gvim /etc/profile
添加下面代码,并保存。
export CLASSPATH=/home/weivid/project
注:修改文件后要想马上生效还要运行 source /etc/profile不然只能在下次重进此用户时生效。
2. 方法二:在用户目录下的.bashrc文件中增加变量【对单一用户生效(永久的)】
用VIM在用户目录下的.bashrc文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。
例如:编辑guok用户目录(/home/guok)下的.bashrc
vi /home/guok/.bashrc
添加如下内容:
export CLASSPATH=/home/weivid/project
注:修改文件后要想马上生效还要运行 source /home/guok/.bash_profile不然只能在下次重进此用户时生效。
3. 方法三:直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
在shell的命令行下直接使用[export变量名=变量值]定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。
四、脚本中调用环境变量的应用
使用 ${变量名} 的方法可以调用自定义的环境变量名。
例如对于一个设计中,需要添加一个路径中的多个文件。
[root@weivid project1] # ls
1.txt 3.txt 5.txt
2.txt 4.txt 6.txt
[root@weivid project1]pwd'
/home/weivid/linux/file/text/project/projject1
需要在一个文档里把这些的文件的绝对路径全部添加至一个文件中。我们写一个脚本文件:
#/usr/bin/bash
export PATH_TXT=/home/weivid/linux/file/text/project/projject1
ls *.txt > list.txt
sed -i 's,^,${PATH_TXT}/,g' list.txt #将生成文件中的路径替换添加进去,生成新的带有绝对路径的list.txt文件
当然也可以把PATH_TXT的变量声明添加至bash或者csh的环境中。用前面介绍的方法。
Comments | 1 条评论
博主 柒月
学到了~