环境变量

1. 概述

1.1 分类

环境变量分为以下三种:

  • 局部(临时)环境变量:在所运行的脚本或 shell 中存在
  • 用户环境变量:在当前登录的用户环境中存在
  • 系统环境变量:在当前系统中存在,可以被任意用户、脚本或 shell 访问到
    在这里插入图片描述

1.2 访问顺序

优先从局部环境变量开始,找不到的就到用户环境变量中,最后再到系统环境变量中访问。

在这里插入图片描述

2. Windows

2.1 临时环境变量

在 Windows 下,打开 CMD(命令提示符),输入:

echo %user%
SET user=xkc
echo %user%
echo %username%
echo %user%/%username%

输出结果如下图:

在这里插入图片描述

通过执行上述命令,我们发现 user 是一个变量,里面存放的值会被用户修改变化,但使用这个变量名 user,我们始终可以获取到里面的最新值。

  • SET 的环境变量仅在当前 CMD 窗口下有效,并且会随着 CMD 的关闭而释放;
  • 如需永久保留环境变量,则需要在系统设置中配置并保存。

2.2 全局环境变量

全局环境变量分为 用户环境变量系统环境变量

  • 用户环境变量:仅在当前用户登录的环境下起作用,如切换成其他用户,那么其环境变量也随之发生变化

  • 系统环境变量:不管是哪个用户登录在当前系统中,都共享使用的环境变量

  • 设置

    在这里插入图片描述
    在这里插入图片描述

3. Linux

环境变量是用来存储shell会话和工作环境的相关信息。环境变量允许在内存中存储数据,以便shell中运行的程序或脚本能够轻松访问到这些数据。

全局环境变量对于shell会话和所有生成的子shell都是可见的。局部环境变量只对创建它的shell可见。

3.1 临时环境变量(或称用户临时变量)

Linux系统默认定义了标准的局部环境变量,不过用户也可以定义自己的局部变量,这些变量被称为用户自定义局部变量。没有命令可以只显示局部环境变量。set命令可以显示特定进程的所有环境变量,包括局部变量、全局变量以及用户自定义变量。
变量名区分大小写,系统环境变量用的都是大写字母,坚持使用小写字母命名用户自定义的局部变量,能够让你避免不小心与系统环境变量同名可能带来的灾难。

Shell 变量名在定义时,首个字符必须为字母(a-z,A-Z),不能以数字开头,中间不能有空格,可以使用下划线 _ ,不能使用 - ,也不能使用标点符号等。

a=123
# 变量介绍:等号两侧不能有空格,否则bash shell会将其视为单独的命令
echo $a # 123

将命令的返回值赋给变量 【以输出日期为例】

  1. A=`date`: 反引号,运行里面的命令,并把结果返回给变量 A
  2. A=$(date): 等价于反引号
  • 如果写 A=date,表示把单词赋值给A
unset var_name
# 清除变量,不要使用$

export 变量名
# 将局部变量导出为全局变量

‌export 和‌ 不使用 export‌ 的主要区别在于变量的作用范围和可见性:

  • 使用 export:通过使用 export 命令将变量导出为环境变量,这个变量不仅在当前 shell 进程中有效,而且在其子进程中也是可见的。这意味着,如果其他进程或脚本需要访问这个变量,它们可以通过环境变量的方式获取到这个变量的值。被导出的变量可以被其他进程或脚本访问,具有继承性,即被子进程继承。
  • 不使用 export‌:这个变量就仅仅在当前shell进程中有效,不会被其他进程或脚本访问到。这样的变量只在当前的 shell 进程中有效,不具备继承性,即不会被子进程继承。

可以将设置变量和导出变量放在一个命令里完成。
例:
在这里插入图片描述

修改子shell中全局环境变量并不会影响父shell中改变量的值,子shell也无法使用export命令改变父shell中全局变量的值。(删除也是如此)

3.2 全局环境变量

可以使用envprintenv命令来查看全局变量
在这里插入图片描述

登录方式也会影响设置的环境变量,要显示个别环境变量的值,可以使用printenv命令,但不要使用env命令。
在这里插入图片描述

也可以使用echo命令显示变量的值,在引用某个环境变量时,必须在该变量名前加上符号"$"
在这里插入图片描述

使用echo命令时,在变量名前加上"$"不仅仅能够显示变量当前的值,还能让变量作为其他命令的参数。

3.2.1 用户环境变量

在Linux系统中,用户环境变量的配置文件主要有两个,分别是 .bashrc.bash_profile(或 .profile)。这些文件通常位于用户的主目录下,并且是隐藏文件,需要通过特定的命令来查看和编辑。

  • .bashrc:这个文件用于配置与 Bash Shell 相关的环境变量和个性化设置,如命令别名、PATH 环境变量的设置、命令提示符的格式等。它会在每次启动新的非登录 Shell 时自动执行。
  • .bash_profile(或 .profile):这个文件用于配置登录 Shell 的环境变量,它会在用户登录时执行一次。如果系统中没有 .bash_profile 文件,那么 .profile 文件会被读取。

例:

输入nano .bashrc #编辑.bashrc文件
输入aaa=111

在这里插入图片描述

按Ctrl+X键保存
按Y键 #确认修改

在这里插入图片描述

输入cat .bashrc #查看.bashrc文件内容,发现已添加aaa=111

在这里插入图片描述

输入echo $aaa #无法显示
输入bash 
输入echo $aaa
成功输出111

在这里插入图片描述

输入mkdir test #创建test文件夹
输入cd test 
输入nano hello.sh

在这里插入图片描述

输入AAA="monkey brother monkey brother you are so great"
	echo $AAA
按Ctrl+X键保存退出,然后按Y确认修改。

在这里插入图片描述

输入ll -a
发现新增hello.sh文件
输入./hello.sh #执行hello.sh
提示权限不够
输入chomod +x hello.sh #给hello.sh增加执行权限

在这里插入图片描述

输入./hello.sh
成功输出monkey brother monkey brother you are so great

在这里插入图片描述

输入cd .. #返回上级目录
输入./hello.sh
提示没有文件或目录 #路径改变导致无法执行
输入./test/hello.sh
成功输出monkey brother monkey brother you are so great

在这里插入图片描述

输入hello.sh
提示未找到命令

在这里插入图片描述

输入nano .bash_profile
在PATH那一行最后添加:~/test 保存退出
# PATH环境变量定义了用于查找命令和程序的目录,用冒号分隔

在这里插入图片描述

输入source .bash_profile
输入hello.sh
成功输出monkey brother monkey brother you are so great

在这里插入图片描述

3.2.2 系统环境变量

在 Linux 系统中,系统环境变量的配置文件主要有以下几个:

  1. /etc/environment:这是一个全局配置文件,用于设置系统级别的环境变量。它会在系统启动时被读取,并且对所有用户生效。

  2. /etc/profile:这个文件用于设置全局的 shell 环境变量,它会在用户登录时被读取。它通常包含一些系统级别的环境变量设置,如 PATH、LANG 等。

  3. /etc/profile.d/ 目录下的脚本文件:这个目录下存放了一系列的 shell 脚本文件,每个文件都可以设置一些环境变量。这些脚本文件会在 /etc/profile 被读取时自动执行。

  4. /etc/bash.bashrc:这个文件用于设置 Bash shell 的全局环境变量。它会在新的 Bash shell 启动时被读取。

  5. /etc/sysconfig 目录下的配置文件:这个目录下有一些特定的配置文件,如 sysconfig/networksysconfig/java 等,它们也可以设置一些环境变量。

例:

输入cd /etc #切换/etc目录
输入cd profile.d 
输入ll -a #以列表形式查看目录,包括隐藏文件

在这里插入图片描述

输入nano hello.sh #创建并编辑hello脚本
输入hello="hello monkey king" 

在这里插入图片描述

输入ll -a #以列表形式查看目录,包括隐藏文件
发现新增hello.sh

在这里插入图片描述

输入source profile #使脚本文件中的命令和变量设置立即生效
输入echo $hello
输出hello monkey king

在这里插入图片描述

按Ctrl+Alt+F2 #切换控制台
登录用户,输入echo $hello
输出hello monkey king

在这里插入图片描述

3.2.3 source

source 命令在 Linux 系统中用于在当前 shell 会话中执行指定的脚本文件,从而使得脚本文件中的命令和变量设置立即生效。换句话说,source 命令可以让你在不重新启动 shell 的情况下,直接应用脚本文件中的更改。

因此,配置好全局环境变量后,还需要使用 source 命令来使该配置文件生效。

例如:source ~/.bashrc

3.3 数组变量

环境变量可以作为数组使用,要为某个环境变量设置多个值。可以把值放在"()"中,值与值之间以空格分隔。
要引用单个数组元素,必须使用表示其在数组位置中的索引。索引要写在"[]"中,$符号之后的所有内容要写在"{}"中。环境变量数组的索引都是从0开始的。要显示整个数组的变量,可以用通配符"*"作为索引,也可以改变某个索引位置上的值,甚至可以使用unset命令来删除数组中的某个值。显示整个数组时看起来好像是其他索引填补了这个位置,实际上这个位置是空的。
在这里插入图片描述

有时候数组变量会将事情搞复杂,所以在shell脚本编程时并不常用,也不方便移植到其他shell环境。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值