本篇简介:
查看Linux默认环境变量
创建与删除自定义环境变量
设置PATH环境变量
定义环境变量文件
01、查看Linux默认环境变量
在shell中我们可以设置一些参数来存储有关shell会话和工作环境的信息,也就是环境变量。设置的环境变量的信息,存放在内存中,可以很方便的进行访问。
环境变量分为全局变量和局部变量:
全局变量:对于shell会话和所有生成的子shell都可见的变量
局部变量:只对创建它的shell可见,也就是说只能在定义他们的进程中可见
我们可以通过printenv命令来查看已定义的全局变量:
[root@localhost ~]# printenv
XDG_SESSION_ID=1
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.91.1 2675 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/0
JRE_HOME=/usr/java/jre
USER=root
如果要查看某一个环境变量的值,只需要在printenv后跟上要查看的变量名称即可:
[root@localhost ~]# printenv HOME
/root
[root@localhost ~]#
也可以用echo来显示变量的值,但是需要在变量前加上美元符号$
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]#
02、创建与删除自定义环境变量
首先看下如何创建一个自定义变量,并给它赋值
[root@localhost ~]# echo $test_var
[root@localhost ~]#
首先查看变量$test_var,执行echo $test_var时并没有值。
通过等号给 test_var 赋值,如果赋值的内容中包含空格,一定要有引号引起来,如下:
[root@localhost ~]# test_var="Hello World"
[root@localhost ~]# echo $test_var
Hello World
[root@localhost ~]#
当再次运行echo $test_var时,已经成功赋值。
注:由于系统的环境变量都是大写字母,我们在自定义变量时,要尽量用小写字母进行定义变量的名称,用以区分,避免混淆。
在设置了局部变量后,可以在当前的shell进程中使用。
但是,如果生成另一个shell后,刚才设置的变量已经不可用了:
[root@localhost ~]# bash
[root@localhost ~]#
[root@localhost ~]# echo $test_var
[root@localhost ~]#
由于我们通过bash创建了一个新的子shell,在子shell中是无法使用上级shell中创建的变量的。
通过exit命令退出当前的子shell后,先前定义的局部变量依然可用。
[root@localhost ~]# exit
exit
[root@localhost ~]# echo $test_var
Hello World
[root@localhost ~]#
同理,如果我们在子shell中创建了局部变量,则回到上级shell后,在子shell中设置的局部变量也不可用。为了避免这种场景,可以定义全局变量。
创建全局变量需要用到export命令,且变量名前不需要加美元符号$
[root@localhost ~]# test_var="show success"
[root@localhost ~]# export test_var
[root@localhost ~]# bash
[root@localhost ~]# echo $test_var
show success
[root@localhost ~]#
如上,由于export使得test_var成为全局变量,即便创建了新的shell后,我们定义的变量依然可用。
如果我们将test_var在子shell中进行重新赋值,并且export为全局变量,只是在当前shell中生效,并不会覆盖上级shell中的值。
通过 unset 命令可以删除已定义的环境变量,使用unset时,变量前不需要$
[root@localhost ~]# unset test_var
[root@localhost ~]# echo $test_var
[root@localhost ~]#
如上,test_var变量已被清空。但是,如果只是在子shell中删除了变量,上级shell中的变量还是依然存在的。
03、设置PATH环境变量
设置了PATH变量后,在退出或重启系统前,都是可用的。
通过echo $PATH 可以查看系统定义的PATH的路径,定义PATH的作用是,对于已经定义在PATH中的目录下的文件可直接执行。
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/java/bin:/root/bin
可比如在/usr/tomcat/bin下有tomcat的启动命令startup.sh,我们如果直接运行startup.sh,则会提示没有相关命令
[root@localhost ~]# startup.sh
-bash: startup.sh: command not found
[root@localhost ~]#
设置 startup.sh 所在的绝对路径 /usr/tomcat/bin 到PATH中,再次运行:
[root@localhost ~]# PATH=$PATH:/usr/tomcat/bin
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/tomcat/bin
[root@localhost ~]# startup.sh
Using CATALINA_BASE: /usr/tomcat
Using CATALINA_HOME: /usr/tomcat
Using CATALINA_TMPDIR: /usr/tomcat/temp
Using JRE_HOME: /usr/java/jre
Using CLASSPATH: /usr/tomcat/bin/bootstrap.jar:/usr/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost ~]#
如上,tomcat已经正常启动。这时如果我们退出系统再次登陆时,设置的PATH变量已经失效。但是,linux为我们提供了另一个解决方案,永久保存设置的PATH环境变量。
04、定义环境变量文件
当我们登陆Linux系统时,shell会从以下5个不同的启动文件中读取启动命令:
/etc/profile
$HOME/.bash_profile
$HOME/.bashrc
$HOME/.bash_login
$HOME/.profile
其中,/etc/profile 是主启动文件,在用户登陆Linux时,都会执行。
由于系统版本,以上五个目录并不一定同时存在,但是会按顺序执行,运行到第一个被找到的文件时,余下的便会忽略。
我们可以编辑 /etc/profile 来设置PATH,并使其永久生效。
[root@localhost ~]# vi /etc/profile
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
....
unset i
unset -f pathmunge
export JAVA_HOME=/usr/java
export JRE_HOME=/usr/java/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$PATH:$JAVA_HOME/bin
我们把java的安装路径以及所设置的PATH添加到 /etc/profile中,并通过resource命令使其生效
[root@localhost ~]# source /etc/profile
[root@localhost ~]# java -version
java version "1.7.0_55"
Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode)
[root@localhost ~]#
这样在每次登陆Linux后,无需配置,在控制台直接输入java便可执行命令了。
领取专属 10元无门槛券
私享最新 技术干货