一、linux脚本文件中export 变量的作用:

1. export 用于声明一个环境变量:   export variable=value
2. 该环境变量只在本进程和其子进程中可以访问。
3. 如果是在系统级的配置文件中,如 /etc/profile中 export 一个变量,那么这个变量就会在整个系统运行期间都起作用。即使新开shell会话连接甚至,重启了服务器仍可生效。
4. 如果在用户级 ~/.bash_profile 之类的文件中,则每次启动shell都会去读这个文件,所以每次打开shell也是可以取到这个值的。
5. 如果在某一次运行中,手动export一个变量,则只在这次shell的使用中,才能访问这个变量,或者在该shell启动的启动程序中,也是可以访问这个变量的,因为它们是这个shell的子进程。新开shell连接及重启服务器都会失效。

 

总之,export 作用就是 把本地变量变成全局变量(实际中叫环境变量)

 

二、举例验证:

举例验证 前面 一 中的 第 3 条:

在root用户下 vim /etc/profile ,追加一行代码

先不使用 export,

GREET="hello,good morning!"

然后,

source /etc/profile

在当前shell窗口及新的shell窗口中,执行 echo $GREET ,会显示变量值 hello,good morning!

[root@fastdfs ~]# echo $GREET
hello,good morning!

如果切换到 普通用户 wudi ,再次执行 echo $GREET , 就无任何显示。即使再切换到root用户,仍无显示。

说明  只对当前 shell会话窗口有效果,对新会话窗口无效。

 

稍作变化,使用 export

在root用户下 vim /etc/profile ,

将
GREET="hello,good morning!"
改为
export GREET="hello,good morning!"

eg:

再source 一下

source /etc/profile

此时,再执行 echo $GREET,以及切换到 普通用户 wudi ,再次执行 echo $GREET , 都会显示变量值 hello,good morning!。即使再切换到root用户,仍可显示。

 

举例验证前面 一 中 第5条:

新开shell会话连接,会失效:

重启服务器也会失效:

 

三 shell与export命令

用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行 shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一 个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来 说,用户可以有许多 shell,每个shell都是由某个shell(称为父shell)派生的。

在子 shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内 的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。 export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。

 

四 Linux 指令:系统设置--export 

 功能说明:设置或显示环境变量。

语  法:export [-fnp][变量名称]=[变量设置值]

补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。

参  数:
 -f  代表[变量名称]中为函数名称。 
 -n  删除指定的环境变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。 --没卵用。
 -p  列出所有的环境变量。

 

eg:  列出所有的环境变量   

export -p

 

五 linux中 source 的用法

source命令:
source命令的功能:使Shell读入指定的Shell程序文件并依次执行文件中的所有语句
source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。
用法:
source filename 或 . filename
source命令(从 C Shell 而来)是bash shell的内置命令;点命令(.),就是个点符号(从Bourne Shell而来)是source的另一名称。

source filename 与 sh filename 及./filename执行脚本的区别在那里呢?

  • 当shell脚本具有可执行权限时,用sh filename与./filename执行脚本没有区别。
  • sh filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell。
  • source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面
Logo

更多推荐