基于Linux下的环境变量设置及使用

什么是环境变量:

	bash  shell用一个叫作环境变量的特性来存储有关shell会话和工作环境的信息。这项特性允许你在内存中存储数据,
	以便程序或shell中运行的脚本能够轻松访问到他们。这也是存储持久数据的一种简单方法。
	环境变量分为两类:
		全局变量
		局部变量

全局环境变量:

	全局环境变量对于shell会话和所有生成的子shell都是可见的。局部变量则只对创建他们的shell可见。这让全局环境变量
对那些所创建的子shell需要获取父shell信息的程序来说非常有用。
	Linux系统在你开始bash会话的时候就设置了一些全局环境变量。系统环境变量基本上都是使用全大写字母以区别于普通
用户的环境变量。
	查看全局变量可以使用env或printenv命令。(数目太多不一一展示)

在这里插入图片描述

	系统为bash shell设置的全局环境变量数目众多,其中有很多是在登录过程中设置的,另外你的登录
方式也会影响到所设置的环境变量。
	要显示个别环境变量的值,可以使用printenv命令,但不要使用env命令。

在这里插入图片描述

也可以使用echo显示变量的值,在这种情况下引用某个环境变量的时候,必须在变量前面加一个美元符($)

在这里插入图片描述

在echo命令中,变量名前加上$不仅仅是显示当前变量的值。它能够让变量作为命令行参数。

在这里插入图片描述全局变量可以使用于进程的所有子shell。在下面这个例子中,用bash命令生成了一个子shell,显示了HOME环境变量的 当前值,这个值和父shell中的一模一样,都是/home/mi

在这里插入图片描述局部环境变量:

  	顾名思义:局部变量只能在定义他们的进程中可见。Linux系统默认定义了标准的局部变量,当然用户也可以自定义局
部变量,这些变量称为用户定义局部变量。但在Linux系统里面没有一个命令只显示局部变量。set命令会显示某个特定进
程设置的所有环境变量,包括局部变量,全局变量和用户自定义变量。

在这里插入图片描述
命令env,printenv,set命令之间的差异很细微,set命令会显示出全局变量,局部变量和用户自定义变量,他还会按照字母顺序 对结果进行排序,env和printenv命令不会对结果进行排序,也不会输出局部变量和用户自定义变量。

设置局部用户定义变量:

	一旦启动了bash shell(或者执行了一个shell脚本)就能创建在这个shell进程内可见的局部变量了。可以通过等号給环境
	变量赋值,值可以是数值或字符串。

在这里插入图片描述

	如果要给变量赋一个带有空格的字符串的值,必须使用引号来界定字符串的首尾。没有引号的话,bash shell会以为下一个
	词是另一个要执行的命令。

在这里插入图片描述

记住:变量名,等号和值之间没有多余的空格,如果在赋值表达式加上了空格,bash shell就会把值当作一个单独的命令。

在这里插入图片描述

设置了局部变量之后,就能在shell进程的任何地方使用了,但是如果生成了另外一个shell,它在子shell中就不可用。

在这里插入图片描述

同理在子shell中设置了局部变量,那么一旦退出子进程,那个局部变量就不可用

在这里插入图片描述设置全局环境变量:

	在创建全局环境变量的进程所创建的子进程中,该变量都是可见的。创建全局环境变量的方法是先创建一个局部环境变量,
	然后再把他导出到全局环境中!

在这里插入图片描述

修改子shell中的全局环境变量并不会影响到父shell中该变量的值。

在这里插入图片描述

子shell甚至无法使用expect命令改变父shell中全局变量的值。

在这里插入图片描述删除环境变量:

	可以用unset命令删除。在unset命令中引用环境变量时,记住不要使用$.

在这里插入图片描述

如果你是在子shell中删除了一个全局环境变量,这只对子进程有效。该全局环境变量在父进程中仍可以使用。

在这里插入图片描述
设置PATH环境变量:

	使用echo $PATH命令可以看到可供shell查找命令和程序。PATH中的目录使用冒号分离。但是这种修改在退出shell或者重启
	系统就会失效。

在这里插入图片描述定位系统环境变量:

shell的三种方式:
	登陆时作为默认登录shell
	作为非登录shell的交互式shell
	作为运行脚本的非交互shell

登录shell:

	当你登录linux系统时,bash shell会作为登录的shell启动。登录shell会从5个不同的启动文件里读取命令:
	/etc/profile:
	$HOME/.bash_profile
	$HOME/.bashrc
	$HOME/.bash_login
	$HOME/.profile

/etc/profile文件:

	/etc/profile文件是bash shell默认的主启动文件,只要你登陆了linux操作系统,bash就会执行/etc/profile启动文件里面的
命令。文件里面有一个for语句。用来迭代/etc/profile.d目录下的所有文件。这为linux系统提供了一个放置特定应用程序的
启动文件的地方,当用户登陆时,shell也会执行这些文件。

在这里插入图片描述$HOME目录下的启动文件:

	提供了一个用户专属的启动文件来定义该用户所用到的环境变量。
	$HOME/.bash_profile
	$HOME/.bashrc
	$HOME/.bash_login
	$HOME/.profile
	注意,这四个文件都是以点号开头,说明他们都是隐藏文件。shell会按照下列顺序,运行第一个被找到的文件:
	$HOME/.bash_profile
	$HOME/.bash_login
	$HOME/.profile

交互式shell:

	如果你的bash shell不是在登陆系统就启动的,那么你启动的shell叫作交互式shell。交互式shell不会访问/etc/profile文
	件,只会检查用户HOME目录中的.bashrc文件。

非交互式shell:

	系统执行shell脚本时用的就是非交互式shell。当bash启动一个非交互式shell进程时,它会检查BASH_ENV这个环境变量查
	看要执行的启动文件。

在这里插入图片描述

数组变量:

环境变量可以作为数组使用。数组能够存储多个值的变量,这些值可以单独引用也可以作为整个数组引用。
mi@ubuntu:~$ mytest=(one two three four five)  
mi@ubuntu:~$ echo $mytest
one
mi@ubuntu:~$ echo ${mytest[2]}   使用索引,默认从0开始索引
three
mi@ubuntu:~$ echo ${mytest[*]}  ×表示所有
one two three four five
mi@ubuntu:~$ mytest[2]=sevem   可以更改数组值
mi@ubuntu:~$ echo ${mytest[*]}
one two sevem four five
mi@ubuntu:~$ unset mytest[2]   使用unset命令删除数组中某个值
mi@ubuntu:~$ echo ${mytest[*]}  
one two four five
mi@ubuntu:~$ echo ${mytest[2]}  删除之后会使得对应的位置置空

mi@ubuntu:~$ echo ${mytest[3]}
four
mi@ubuntu:~$ unset mytest   删除整个数组
mi@ubuntu:~$ echo ${mytest[*]}

mi@ubuntu:~$ 

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值