Linux使用局部变量、环境变量,export声明方法,并在实际脚本中调用

发布于 2021-03-31  545 次阅读


系统局部变量和全局变量

一、变量分类

局部变量和环境变量,局部变量只适用于当前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的环境中。用前面介绍的方法。


或许明日太阳西下倦鸟已归时