zoukankan      html  css  js  c++  java
  • Linux的shell变量

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

    环境变量,或者称为全局变量,存在与所有的shell中,在你登陆系统的时候就已经有了相应的系统定义的环境变量了。Linux的环境变量具有继承性,即子shell会继承父shell的环境变量。

    本地变量,当前shell中的变量,很显然本地变量中肯定包含环境变量。Linux的本地变量的非环境变量不具备继承性。

    Linux中环境变量的文件

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

        /etc/profile

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

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

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

        /etc/bashrc

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

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

        ~/.bash_profile

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

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

        ~/.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中执行

    ilonng

    摘自:http://chenzs19850728.blog.163.com/blog/static/7629609200801083611728/

  • 相关阅读:
    【公告】对乐逍遥和王者之剑利用破解程序插入刷流量广告处理结果
    Thunder7.2.13.3884 JayXon
    免费获取半年 Bitdefender Total Security 2014
    WIN8.1 PRO RTM VOL.2013.09.18
    免费一年MAP2014+6个月免费MIS2014
    大蜘蛛9.0正式版
    腾讯控股涉足商业银行 微信或成先头兵
    植物大战僵尸2:奇妙时空之旅[官方安卓简体中文高清版]有内含....
    苹果iPhone 5C和5S发布后,消费者如何选择?
    pandas中DataFrame操作(一)
  • 原文地址:https://www.cnblogs.com/gaohuag/p/2744698.html
Copyright © 2011-2022 走看看