`
xuyuanshuaaa
  • 浏览: 387577 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

linux环境变量和本地变量

阅读更多
 
每一种编程语言中,我们都会碰到变量的作用域的问题。(比如在函数中定义的变量在函数外不能使用的)
BASH 中也有类似的问题,局部变量和环境变量(全局变量)。
局部变量是普通的变量,仅在创建它的Shell中有效。
环境变量。我们更多的使用“环境变量”而不是“全局变量”,因为这个名称更
能体现它的特点。环境变量对创建它的Shell及其派生出来的子进程都有效。或者说环境变量可以继承,但它对其它与创建它的Shell没有关系的Shell并不可见。其实重启一个终端就是重新启动了一个shell

Linux的变量可分为两类:环境变量和本地变量

环境变量,或者称为全局变量,存在与所有的shell中,在你登陆系统的时候就已经有了相应的系统定义的环境变量了。Linux的环境变量具有继承性,即子shell会继承父shell的环境变量。
#env 显示环境变量
本地变量,当前shell中的变量,很显然本地变量中肯定包含环境变量。Linux的本地变量的非环境变量不具备继承性。
#set显示本地变量
Linux中环境变量的文件

    当你进入系统的时候,linux就会为你读入系统的环境变量,这些环境变量存放在什么地方,那就是环境变量的文件中。Linux中有很多记载环境变量的文件,它们被系统读入是按照一定的顺序的。

1.    /etc/profile:

此文件为系统的环境变量,它为每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集shell的设置。

    这个文件,是任何用户登陆操作系统以后都会读取的文件(如果用户的shell是csh、tcsh、zsh,则不会读取此文件),用于获取系统的环境变量,只在登陆的时候读取一次。

    假设用户使用的是BASH,那么

2.    /etc/bashrc:

在执行完/etc/profile内容之后,如果用户的SHELL运行的是bash,那么接着就会执行此文件。另外,当每次一个新的bash shell被打开时,该文件被读取。

    每个使用bash的用户在登陆以后执行完/etc/profile中内容以后都会执行此文件,在新开一个bash的时候也会执行此文件。因此,如果你想让每个使用bash的用户每新开一个bash和每次登陆都执行某些操作,或者给他们定义一些新的环境变量,就可以在这个里面设置。

3.    ~/.bash_profile:

每个用户都可使用该文件输入专用于自己使用的shell信息。当用户登录时,该文件仅仅执行一次,默认情况下,它设置一些环境变量,执行用户的.bashrc文件。

    单个用户此文件的修改只会影响到他以后的每一次登陆系统。因此,可以在这里设置单个用户的特殊的环境变量或者特殊的操作,那么它在每次登陆的时候都会去获取这些新的环境变量或者做某些特殊的操作,但是仅仅在登陆时。

4.    ~/.bashrc:

该文件包含专用于单个人的bash shell的bash信息,当登录时以及每次打开一个新的shell时,该该文件被读取。

    单个用户此文件的修改会影响到他以后的每一次登陆系统和每一次新开一个bash。因此,可以在这里设置单个用户的特殊的环境变量或者特殊的操作,那么每次它新登陆系统或者新开一个bash,都会去获取相应的特殊的环境变量和特殊操作。

~/.bash_logout:

当每次退出系统(退出bash shell)时,执行该文件。

几个命令

    env和printenv

    这两个变量用于打印所有的环境变量:

[root@devdb1 worksh]# env

HOSTNAME=devdb1

TERM=vt100

..........................................................

OLDPWD=/root

[root@devdb1 worksh]# printenv

HOSTNAME=devdb1

TERM=vt100

..........................................................

OLDPWD=/root

[root@devdb1 worksh]#


    另外,env变量还有其他的功能,如下:

env [-i|-] [name=value] [command [argument]]

这里的“-i”或者“-”,都是表示忽略继承的环境变量;这里的name=value,用于指定本地变量对,可以有多组;整个命令的含义是,忽略继承的环境变量,设定多组name变量,在此基础上运行命令command。如

env -i test="test" bash -c 'echo $SHELL; env'

/bin/bash

PWD=/home/oracle

test=test

SHLVL=1

_=/bin/env


很显然,这里新运行bash并没有继承环境变量,但是却设置了本地变量test。

    set

    用于显示与设置当前本地变量。单独一个set就显示了当前环境的所有的变量,它肯定包括环境变量和一些非环境变量,如:

[oracle@devdb1 oracle]$ set

BASH=/bin/bash

BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i386-redhat-linux-gnu")

BASH_VERSION='2.05b.0(1)-release'

BDUMP=/opt/oracle/admin/devdb/bdump

COLORS=/etc/DIR_COLORS

COLUMNS=132

DIRSTACK=()

EUID=500

GROUPS=()

G_BROKEN_FILENAMES=1

HISTFILE=/home/oracle/.bash_history

HISTFILESIZE=1000

HISTSIZE=1000

HOME=/home/oracle


.............................

    set很有很多其他的选项,具体请参考man set。

    unset

    用于清除变量。不管这个变量是环境变量还是本地变量,它都可以清除。

-- 下面是清除本地变量

[oracle@devdb1 oracle]$ set|grep myname

myname=ilonng

[oracle@devdb1 oracle]$ unset myname

[oracle@devdb1 oracle]$ set|grep myname

-- 下面是清除环境变量

[oracle@devdb1 oracle]$ env|grep myname

myname=ilonng

[oracle@devdb1 oracle]$ unset myname

[oracle@devdb1 oracle]$ env|grep myname

    export

用于把变量变成当前shell和其子shell的环境变量,存活期是当前的shell及其子shell,因此重新登陆以后,它所设定的环境变量就消失了。如何将环境变量永久化?修改上面介绍的那几个环境变量的配置文件。


[oracle@devdb1 oracle]$ export myname=ilonng

[oracle@devdb1 oracle]$ env|grep myname

myname=ilonng

[oracle@devdb1 oracle]$ bash

[oracle@devdb1 oracle]$ env|grep myname

myname=ilonng

[oracle@devdb1 oracle]$ exit

exit

[oracle@devdb1 oracle]$ env|grep myname

myname=ilonng

    source

当直接执行一个脚本的时候,其实是在一个子shell环境运行的,即开启了一个子shell来执行这个脚本,脚本执行完后该子shell自动退出。

有没有办法在当前shell中执行一个脚本呢?使用source命令就可以让脚本在当前shell中执行。如:

[oracle@dbamonitor NBU]$ cat test.sh   -- 查看脚本内容,显示变量内容

echo $myname

[oracle@dbamonitor NBU]$ echo $myname -- 变量存在,内容是ilonng

ilonng

[oracle@dbamonitor NBU]$ set |grep myname -- 变量是本地变量

myname=ilonng

[oracle@dbamonitor NBU]$ env |grep myname -- 变量不是环境变量

[oracle@dbamonitor NBU]$ sh test.sh -- 直接执行,新开子shell,非环境变量的本地变量不具备继承性,在子shell中不可见

-- 这里什么都没有输出
   
[oracle@dbamonitor NBU]$ source test.sh -- source命令,是脚本在当前shell中执行

分享到:
评论

相关推荐

    linux超级基础系列——shell变量(本地变量和环境变量

    linux超级基础系列——shell变量(本地变量和环境变量 linux超级基础系列——shell变量(本地变量和环境变量

    linux超级基础系列——shell变量(本地变量和环境变量).pdf

    linux超级基础系列——shell变量(本地变量和环境变量).pdf

    linux超级基础系列——shell变量(本地变量和环境变量)[参考].pdf

    linux超级基础系列——shell变量(本地变量和环境变量)[参考].pdf

    Linux下display环境变量的作用

    在Linux/Unix类操作系统上, DISPLAY用来设置将... DISPLAY环境变量将自动设置为:0:0, 此时可以打开终端, 输出图形程序的名称(比如xclock)来启动程序, 图形将显示在本地窗口上, 在终端上输入printenv查看当前环境变量...

    JMeter在Linux系统中的环境变量配置

    下载:  在线下载jmeter(或者本地上传): ...  拷贝到安装目录并解压:  $ cp apache-jmeter-3.1.tgz /usr/local/jmeter/ ...  为指定用户配置环境变量,是通过用户目录下的用户配置文件{.bash_profile}

    第64天:权限提升-Linux定时任务&环境变量&数据库1

    1.提权环境,信息收集(SUID,定时任务,可能漏洞,第三方服务应用等) 2.最新相关漏洞要明确(关注点),二次开发相关脚本学会展望(四个脚本) 3.本地 se

    jmeter在linux系统下运行及本地内存调优的方法详解

    3.配置jmeter环境变量 vim /etc/profile 添加 export PATH=/apache-jmeter-4.0/bin/:$PATH 注意路径 4.使用 rz命令上传jdk1.8 linux 64位版本 解压到 usr/local 目录下 下载jdk安装包 下载地址:...

    LINUX下的kerberos的安装配置

    kerberos是由mit开发的提供网络认证的系统。使用kerberos自己提供的ktelnetd、krlogind、krshd来替换传统的telnetd、rlogind、rshd服务。

    Linux bash Shell中的变量类型详解

    本地变量 局部变量 环境变量 位置变量 特殊变量(内置) 二、本地变量: varname=value:作用域为整个bash进程可以使用; 变量命名规范: 1. 只能含字母、数字和下划线,并且以字母和下划线开头 2. 最好不要跟系统已...

    Linux下安装jdk

    Linux系统安装jdk环境及环境变量配置

    RED HAT LINUX 6大全

    本书内容翔实、涉及领域广泛,并且提供了详细的例子和大量的参考资料(包括书籍、电子文档和Internet站点),是一本学习、使用和管理Linux不可多得的好书。 目 录 译者序 前言 第一部分 Red Hat Linux的介绍与安装 ...

    SVN安裝、JDK配置

    SVN安裝 一、如果可以上网可在线安装。 二、本地下载插件安装 、JDK环境变量配置。

    Linux知识点思维导图(持续更新)

    Linux——文件权限属性和权限管理 Linux——vim简介、配置方案(附带超美观的配置方案)、...Linux——环境变量与本地变量 Linux——进程程序替换 Linux——shell程序简单实现 Linux——系统文件IO Linux——磁盘文件

    linux驱动开发-文件系统本地挂载.pdf

    介绍Linux开发根文件系统挂载、NFS文件系统配置,UBOOT环境变量配置,完成文件系统启动,数码相册功能。

    Linux常用命令、日常开发常用

    定义全局环境变量; 查看日志并查找关键字; 设置防火墙开机自启; 防火墙开放或移除端口; 解压缩文件为压缩包; 从Linux中上传或下载文件到本地(lrzsz); shell编辑命令快捷键; 配置命令开机自动执行脚本; ...

    LINUX与UNIX SHELL编程指南(很全)

    18.3.18 测试和设置环境变量 169 18.3.19 检测最后命令状态 170 18.3.20 增加和检测整数值 171 18.3.21 简单的安全登录脚本 172 18.3.22 elif用法 173 18.3.23 使用elif进行多条件检测 173 18.3.24 多文件位置检测 ...

    cmd操作命令和linux命令大全收集

    CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本) 命令大全 1. gpedit.msc-----组策略 ...set 指定环境变量名称=要指派给变量的字符 设置环境变量 set 显示当前所有的环境变量...

    Linux shell编程指南

    18.3.18 测试和设置环境变量 169 18.3.19 检测最后命令状态 170 18.3.20 增加和检测整数值 171 18.3.21 简单的安全登录脚本 172 18.3.22 elif用法 173 18.3.23 使用elif进行多条件检测 173 18.3.24 多文件位置检测 ...

Global site tag (gtag.js) - Google Analytics