每一种编程语言中,我们都会碰到变量的作用域的问题。(比如在函数中定义的变量在函数外不能使用的)
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变量主要分为两大类:本地变量和环境变量。除此之外,还存在另外两种特殊变量,它们是只读的,并且主要用作向shell脚本传递参数。 本地变量仅在创建它们的shell生命期内有效,也就是说,它们只在...
### Linux环境变量配置实用技巧详解 #### 一、概述 Linux作为一款强大的开源操作系统,以其稳定性和灵活性著称。其中一个重要的特性就是环境变量的管理。环境变量是在操作系统中定义的一组特殊的变量,它们用于存储...
本文主要聚焦于Linux环境变量的设置,特别是关于`PATH`变量的配置,这对于有效地使用安装的应用程序至关重要。 环境变量是系统中预定义的一系列变量,它们包含了系统配置、用户偏好以及其他关键信息。例如,`HOME`...
Linux 超级基础系列 —— shell 变量(本地变量和环境变量) shell 变量是 Linux 系统中的一种重要概念,它允许用户存储和重复使用有用的信息,提高工作效率。shell 变量可以分为本地变量和环境变量两种。 什么是...
在Linux操作系统中,环境变量扮演着至关重要的角色,它们提供了系统和用户之间交互的上下文...了解并熟练操作Linux环境变量对于日常的系统管理和脚本编写至关重要,它能够帮助你更有效地定制系统行为和优化工作流程。
### Linux环境变量命令详解 #### 一、环境变量概述 在Linux系统中,环境变量扮演着极其重要的角色,它们不仅定义了用户的工作环境,还决定了应用程序的行为方式。环境变量是一组特殊的变量,由一系列键值对组成,...
在Linux操作系统中,环境变量扮演着至关重要的角色,它们提供了系统和用户...总之,理解并掌握Linux环境变量的管理对于任何Linux用户都是必要的技能,它可以帮助我们更好地定制和优化我们的工作环境,提升工作效率。
Linux环境变量设置是每个系统管理员和开发者必须掌握的基础技能,因为它们对软件的可执行性和用户的交互体验至关重要。环境变量是Linux系统中的关键元素,它们提供了系统如何运行和交互的信息。当我们在终端输入命令...
总之,理解并掌握Linux环境变量的使用和管理是每个系统管理员和开发者必备的技能,它有助于优化工作流程,定制个性化的工作环境,以及解决各种软件配置问题。通过正确设置和使用环境变量,我们可以更好地控制程序的...
本文将详细介绍几个常见的Linux环境变量,包括`SHELL`、`LANG`、`PATH`、`MANPATH`、`INPUTRC`、`BASH_ENV`、`DISPLAY`、`COLORTERM`、`USER`、`LOGNAME`、`MAIL`、`HOSTNAME`和`HISTSIZE`等,并通过一个示例文件...
### 定制Linux系统环境变量详解 #### 一、引言 在Linux系统中,环境变量扮演着极其重要的角色,它们不仅定义了系统的运行环境,还直接影响着各种应用程序的行为。了解并掌握如何定制Linux系统环境变量,对于提高...
本文介绍了Linux Shell中的本地变量和环境变量的概念及其基本用法。本地变量仅在当前Shell环境中有效,而环境变量则在整个系统范围内有效。通过合理的定义和使用这些变量,可以极大地提高Shell脚本的灵活性和可维护...
本文将对 Shell 变量进行详细的介绍,包括什么是 Shell 变量、如何使用本地变量和环境变量、变量的设置、显示和清除方法等。 1. 什么是 Shell 变量? Shell 变量是存储设备中的一些可读写的存储单元。变量可以定制...
4. **env命令**:显示当前环境中的所有环境变量,而`set`命令则显示所有本地定义的Shell变量,包括环境变量和非环境变量。 5. **read命令**:配合`export`可用于从用户输入创建环境变量,例如`read -p "Enter a ...
- `set`命令则可以显示所有本地Shell变量,包括环境变量和非环境变量。 3. **删除环境变量**: - 使用`unset`命令可以移除环境变量。例如,`unset TEST`将删除名为TEST的环境变量。 4. **只读环境变量**: - `...
Linux 环境变量的设置和查看方法 Linux 环境变量是 Linux 系统中的一种重要概念,用于存储和管理系统中的变量信息。在 Linux 中,环境变量可以分为永久的和临时的两种,永久的环境变量需要修改配置文件,而临时的...
在 Linux 系统中,环境变量可以分为两类:shell 变量和环境变量。shell 变量是局部的,仅在特定的 shell 中固定,而环境变量是全局的,可以被所有当前用户所运行的程序所使用。 1. 环境变量简介 在 Linux 系统中,...
下载: 在线下载jmeter(或者本地上传): ... 拷贝到安装目录并解压: $ cp apache-jmeter-3.1.tgz /usr/local/jmeter/ ... 为指定用户配置环境变量,是通过用户目录下的用户配置文件{.bash_profile}
本文将详细介绍shell基础中的数值运算与运算符、环境变量配置文件和shell登录信息。 一、shell中的数值运算符 在shell中,数值运算符用于对数字进行操作,常见的数值运算符有: * 加法:`a + b` * 减法:`a - b` ...
Java环境变量设置对于Java开发者而言,是一个非常重要的步骤,因为它关系到能否成功编译和运行Java程序。在介绍Java环境变量设置之前,我们需要了解Java语言的一些特点。Java是一种简单、面向对象、分布式、解释性、...