linux技术手册-定义环境变量

本篇简介:

查看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便可执行命令了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180829G09VB500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券