zoukankan      html  css  js  c++  java
  • shell与export命令

    围绕以下几个问题来学习export命令:

    1.什么是export命令?

    2.为什么要用export命令?

    3.怎么使用export命令?

    1.什么是export命令?

      ♦ 用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行 shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一 个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来 说,用户可以有许多 shell,每个shell都是由某个shell(称为父shell)派生的。
    在子 shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内 的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。 export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。
    [例]在本例中,变量myfile是在dispfile脚本程序中定义的。然后用export命令将变量myfile输出至任何子shell,例如当执行printfile脚本程序时产生的子shell。printfile脚本程序时产生的子shell。

    2.为什么要用export命令?  

       为了是是我们定义一个变量时可以在子shell中被调用,而不需要重复去定义。

    3.怎么使用export命令?

      解释:♦Linux export命令用于设置或显示环境变量。

     

        ♦在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该次登陆操作。

      语法:

    export [-fnp][变量名称]=[变量设置值]

      参数说明

    -f  代表[变量名称]中为函数名称。
    -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
    -p  列出所有的shell赋予程序的环境变量。

    实例

    列出当前所有的环境变量

    [root@localhost ~]# export -p
    declare -x CVS_RSH="ssh"
    declare -x G_BROKEN_FILENAMES="1"
    declare -x HISTSIZE="1000"
    declare -x HOME="/home/zszc"
    declare -x HOSTNAME="localhost"
    declare -x INPUTRC="/etc/inputrc"
    declare -x KDEDIR="/usr"
    declare -x KDE_IS_PRELINKED="1"
    declare -x KDE_NO_IPV6="1"
    declare -x LANG="zh_CN.UTF-8"
    declare -x LC_ALL="zh_CN.GBK"
    declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
    declare -x LOGNAME="root"
    declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:"
    declare -x MAIL="/var/spool/mail/root"
    declare -x OLDPWD
    declare -x PATH="/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/usr/lib64/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/zszc/bin"
    declare -x PWD="/home/zszc"
    declare -x QTDIR="/usr/lib64/qt-3.3"
    declare -x QTINC="/usr/lib64/qt-3.3/include"
    declare -x QTLIB="/usr/lib64/qt-3.3/lib"

    定义环境变量;

    [root@localhost ~]# export laolao#定义环境变量
    [root@localhost ~]# export -p
    declare -x CVS_RSH="ssh"
    declare -x G_BROKEN_FILENAMES="1"
    declare -x HISTSIZE="1000"
    declare -x HOME="/home/zszc"
    declare -x HOSTNAME="localhost"
    declare -x INPUTRC="/etc/inputrc"
    declare -x KDEDIR="/usr"
    declare -x KDE_IS_PRELINKED="1"
    declare -x KDE_NO_IPV6="1"
    declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
    declare -x SSH_CLIENT="192.168.113.206 17527 22"
    declare -x SSH_CONNECTION="192.168.113.206 17527 192.168.44.33 22"
    declare -x SSH_TTY="/dev/pts/1"
    declare -x TERM="vt100"
    declare -x USER="root"
    declare -x a="echo hollo li"
    declare -x b="echo hollo qiang"
    declare -x c="echo huahua"
    declare -x laolao
    declare -x test="value1"

    定义环境变量赋值

    [root@localhost ~]# export laolao=2
    [root@localhost ~]# export -p
    declare -x CVS_RSH="ssh"
    declare -x G_BROKEN_FILENAMES="1"
    declare -x HISTSIZE="1000"
    declare -x HOME="/home/zszc"
    declare -x HOSTNAME="localhost"
    declare -x INPUTRC="/etc/inputrc"
    declare -x KDEDIR="/usr"
    declare -x KDE_IS_PRELINKED="1"
    declare -x KDE_NO_IPV6="1"
    declare -x LANG="zh_CN.UTF-8"
    declare -x LC_ALL="zh_CN.GBK"
    declare -x TERM="vt100"
    declare -x USER="root"
    declare -x a="echo hollo li"
    declare -x b="echo hollo qiang"
    declare -x c="echo huahua"
    declare -x laolao="2"
    declare -x test="value1"
    [root@localhost ~]# 

     

      ♦得 出的结论是:

        •1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出;

        •2、一个shell中的系统环境变量才会被复制到子 shell中(用export定义的变量);

        •3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失 (并不能返回到父shell中)

        •4、不用export定义的变量只对该shell有效,对子shell也是无效的

    实例:

    [root@localhost ~]# vim liqiang.sh
    export a='echo hollo li'
    b='echo hollo qiang'
    ./liqiang-3.sh
    [root@localhost ~]# vim liqiang-3.sh
    echo 看看这里调用几次
    echo 调用一次就对了
    echo $a
    echo $b
    bash

    输出结果:

    [root@localhost ~]# ./liqiang.sh
    看看这里调用几次
    调用一次就对了
    echo hollo li

    实例2:在子shell中定义变量,在父shell中调用。

    [root@localhost ~]# vim liqiang-3.sh
    echo 看看这里调用几次
    echo 调用一次就对了
    echo $a
    echo $b
    c='echo huahua'
    bash
    ~
    root@localhost ~]# vim liqiang.sh
    export a='echo hollo li'
    export b='echo hollo qiang'
    ./liqiang-3.sh
    echo $c

    运行结果:

    [root@localhost ~]# ./liqiang.sh
    看看这里调用几次
    调用一次就对了
    echo hollo li
    echo hollo qiang
    #c没有被调用
    [root@localhost ~]# 

    实例3:在子shell中用export导出依然不会被父shell调用c

    [root@localhost ~]# vim liqiang-3.sh
    echo 看看这里调用几次
    echo 调用一次就对了
    echo $a
    echo $b
    export c='echo huahua'
    bash

    运行结果:

    [root@localhost ~]# ./liqiang.sh
    看看这里调用几次
    调用一次就对了
    echo hollo li
    echo hollo qiang
    [root@localhost ~]# 

     

    对source这块理解的还不是很清,只知道source把多有的脚本都拉进一个shell中进行执行,只有有一个PID,那这个时候所有的变量都应该是可以随便使用的。

  • 相关阅读:
    Python包中__init__.py作用
    获取web页面xpath
    Selenium学习(Python)
    C++构造函数的选择
    分布式实时处理系统——C++高性能编程
    构建之法(邹欣)
    分布式实时处理系统——通信基础
    go语言-csp模型-并发通道
    redis.conf 配置说明
    Linux fork()一个进程内核态的变化
  • 原文地址:https://www.cnblogs.com/insane-Mr-Li/p/9099066.html
Copyright © 2011-2022 走看看