shell-的变量-全局变量

shell变量基础及深入

  1. 变量类型
    变量可分为两类:环境变量(全局变量)和局部变量。
    环境变量也可称为全局变量,可以在创建他们的shell及其派生出来的任意子进程shell中使用。局部变量只能在创建他们的shell函数或脚本中使用。还有一些变量是用户创建的其它的则是专用shell变量。
  2. 环境变量
    环境变量用于定义shell的运行环境,保证shell命令的正确执行,shell通过环境变量来确定登陆用户名、命令路径、终端类型、登陆目录等,所有的环境变量都是系统全局变量,可用于所有子进程中,这包括编辑器、shell脚本和各类应用。
    环境变量可以在命令行中设置,但用户退出时这些变量值也会丢失,因此最好在用户家目录下的.bash_profile文件中或全局配置/etc/profile文件或者/etc/profile.d/中定义。将环境变量放入profile文件中,每次用户登录时这些变量值都将被初始化。
    传统上,所有环境变量均为大写。环境变量应用于用户进程前,必须用export命令导出
    环境变量可用在创建他们的shell和从该shell派生的任意子shell或进程中。他们通常被称为全局变量以区别局部变量。通常,环境变量应该大写。环境变量是已经用export内置命令导出的变量。
    有一些环境变量,比如HOME、PATH、SHELL、UID、USER等,在用户登录之前就已经被/bin/login程序设置好了,通常环境变量定义并保存在用户家目录下.bashprofile文件中。具体的环境变量说明请参考下表:bash环境变量
    变量名 含义
    BASH=/bin/bash 调用bash实例时使用的全路径名
    = 上一条命令的最后一个参数
    BASH_VERSINFO=([0])="3"[1]="2"[2]="25"[3]="1"[4]="release"[5]="x86_64-redhat-linux-gnu") 使用2.0以上版本时,展开为版本信息
    BASH_VERSION='3.2.25(1)-release’ 当前bash实例的版本号
    COLORS=/etc/DIR_COLORS
    COLUMNS=32 设置该变量就给shell编辑模式和选择的命令定义了编辑窗口的宽带。
    consoletype=pty
    CVS_RSH=ssh
    DIRSTACK=() 代表目录栈的当前内容
    EUID=0 为在shell启动时被初始化的当前拥护的有效ID
    G_BROKEN_FILENAMES=1
    GROUPS=0 当前用户所属的组
    HISTFILE=/root/.bash_history 历史记录文件的全路径
    HISTFILESIZE=50 历史文件能包含的最大行数
    HOME=/root 当前用户家目录
    HOSTNAME=root 当前主机机器名称
    HOSTTYPE=x86_64
    IFS=$'\t\n' 内部字段分隔符,一般是空格符、制表符、和换行符,用于由命令替换,循环结构中的表和读取的输入产生的词的字段划分。
    INPUTRC=/etc/inputrc readline启动文件的文件名,取代默认的~/.inputrc
    JAVA_HOME=/application/jdk1.8.0_10
    KDEDIR=/usr
    KDE_IS_PRELINKED=1
    KDE_NO_IPV6=1
    LANG=zh_CN.GB18030 中文字体变量
    LESSOPEN='/usr/bin/lesspipe.sh %s'
    LINES=36
    LOGNAME=root 登陆用户名称
    LS_COLORS=xx
    MACHRYPE=x86_64-redhat-linux-gnu 包含一个描述正在运行bash的系统串
    MAILCHECK=60 这个参数定义shell将隔多长时间(以秒为单位检查一次由参数MAILPATH或MAILFILE)指定的文件,看看是否有邮件到达。默认值600秒
    MAIL=/var/spool/mail/root 邮件全路径
    OLDPWD=/root 前一个当前工作目录
    OPTERR=1 如果设置为1,秒年十时毫来自getopts内置命令的错误信息。
    OPTIND=1 下一个有getopts内置命令处理的参数的序号
    OSTYPE=linux-gnu 自动设置成一个串,该串描述正在运行bash的操作系统,默认值由系统决定
    PATH=/opt/maven/bin:/usr/local/mysql/bin:/opt/jdk/bin:/opt/jdk/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/tomcat/bin:/opt/tomcat_8081/bin:/root/bin 全局PATH路径。命令搜索路径。一个由冒号分隔的目录列表,shell用它来搜索命令。默认路径有系统决定,并且由安装bash的管理员设置
    PIPESTATUS=([0]="0"[1]="0") 一个数组,包含一列最进在管道执行的前台作业的进程退出状态值。
    PPID=1112 父进程的进程ID
    PRELENK_FULL_TIME_INTERVAL=14
    PRELINKING=yes
    PRELINK_NONRPM_CHECK_INTERVAL=7
    PRELINK_OPTS=-mR
    PS1=[\u@\h \W]\$ 主提升符串,默认值是¥
    PS2='>' 次提示符号,默认值是>
    PS4='+' 当开启追踪时使的调试提示符串,默认是+,追踪可用set -x开启
    PWD=/home 当前用户家目录
    QTDIR=/usr/lib64/qt-3.3
    QTINC=/usr/lib64/qt-3.3/include
    QTLIB=/usr/lib64/qt-3.3/lib
    qt_prefix=/usr/lib64/qt-3.3
    PESIN_HOME=/application/resin-3.1.6 这是人为通过export设置的环境变量java用
    SHELL=/bin/bash
    SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor 包含一列开启的shell选项
    SHLVL=1 每启动一个bash实例就将其加1
    SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
    TERM=vt100
    TMOUT=3600 退出前等待超时的秒数
    UID=0 当前用户的UID,在shell启动时初始化。
    USER=root 当前用户的用户名,在shell启动时初始化
  3. 自定义环境变量(全局变量)
    设置环境变量
    如果想设置环境变量,就要在给变量赋值之后或设置变量时使用export命令,带-x选项的declare内置命令也可完成同样的功能。(注意:输出变量时不要在变量名前面加$)
    表 export命令和选项
    选项 值
    --
    -f
    -n
    -p
    格式:
    export 变量名=value
    变量名=value;export 变量名
    declare -x 变量名=value
    提示:以上为三种设置环境变量的方法
    例:
    export NAME=oldboy
    declare -x
    自定义环境变量生产环境java环境配置实例:
    export JAVA_HOME=/opt/jdk
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
    export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
    export TOMCAT_HOME=/opt/tomcat
    export PATH=$PATH:$TOMCAT_HOME/bin
    放在:/etc/profile 或者 /etc/profile.d/下
  4. 显示与取消环境变量
    l 通过echo命令打印环境变量
    $HOME 用户登录时进入的目录
    $UID 当前用户的UID(用户标识)相当于id -u
    $PWD 当前工作目录的绝对路径名
    $SHELL 当前SHELL
    其他省略若干
    例子
    [root@yanwei-test1 scripts]# echo $HOME
    /root
    [root@yanwei-test1 scripts]# echo $UID
    0
    [root@yanwei-test1 scripts]# echo $PWD
    /server/scripts
    [root@yanwei-test1 scripts]# echo $SHELL
    /bin/bash
    [root@yanwei-test1 scripts]# echo $USER
    root
    提示:在写shell脚本时可以直接使用上面的系统默认的环境变量
    l 用env(printenv)或set显示默认的环境变量
    [root@yanwei-test1 scripts]# env
    TOMCAT_HOME=/opt/tomcat_8081
    XDG_SESSION_ID=1277
    HOSTNAME=yanwei-test1
    TERM=xterm
    SHELL=/bin/bash
    HISTSIZE=1000
    SSH_CLIENT=192.168.0.157 49318 22
    SSH_TTY=/dev/pts/0
    USER=root
    LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:.tar=01;31:.tgz=01;31:.arc=01;31:.arj=01;31:.taz=01;31:.lha=01;31:.lz4=01;31:.lzh=01;31:.lzma=01;31:.tlz=01;31:.txz=01;31:.tzo=01;31:.t7z=01;31:.zip=01;31:.z=01;31:.Z=01;31:.dz=01;31:.gz=01;31:.lrz=01;31:.lz=01;31:.lzo=01;31:.xz=01;31:.bz2=01;31:.bz=01;31:.tbz=01;31:.tbz2=01;31:.tz=01;31:.deb=01;31:.rpm=01;31:.jar=01;31:.war=01;31:.ear=01;31:.sar=01;31:.rar=01;31:.alz=01;31:.ace=01;31:.zoo=01;31:.cpio=01;31:.7z=01;31:.rz=01;31:.cab=01;31:.jpg=01;35:.jpeg=01;35:.gif=01;35:.bmp=01;35:.pbm=01;35:.pgm=01;35:.ppm=01;35:.tga=01;35:.xbm=01;35:.xpm=01;35:.tif=01;35:.tiff=01;35:.png=01;35:.svg=01;35:.svgz=01;35:.mng=01;35:.pcx=01;35:.mov=01;35:.mpg=01;35:.mpeg=01;35:.m2v=01;35:.mkv=01;35:.webm=01;35:.ogm=01;35:.mp4=01;35:.m4v=01;35:.mp4v=01;35:.vob=01;35:.qt=01;35:.nuv=01;35:.wmv=01;35:.asf=01;35:.rm=01;35:.rmvb=01;35:.flc=01;35:.avi=01;35:.fli=01;35:.flv=01;35:.gl=01;35:.dl=01;35:.xcf=01;35:.xwd=01;35:.yuv=01;35:.cgm=01;35:.emf=01;35:.axv=01;35:.anx=01;35:.ogv=01;35:.ogx=01;35:.aac=01;36:.au=01;36:.flac=01;36:.mid=01;36:.midi=01;36:.mka=01;36:.mp3=01;36:.mpc=01;36:.ogg=01;36:.ra=01;36:.wav=01;36:.axa=01;36:.oga=01;36:.spx=01;36:*.xspf=01;36:
    MAVEN_HOME=/opt/maven
    MAIL=/var/spool/mail/root
    PATH=/opt/maven/bin:/usr/local/mysql/bin:/opt/jdk/bin:/opt/jdk/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/tomcat/bin:/opt/tomcat_8081/bin:/root/bin
    PWD=/server/scripts
    JAVA_HOME=/opt/jdk
    LANG=zh_CN.UTF-8
    HISTCONTROL=ignoredups
    SHLVL=1
    HOME=/root
    LOGNAME=root
    CLASSPATH=.:/opt/jdk/lib:/opt/jdk/jre/lib:/opt/jdk/lib/tools.jar
    SSH_CONNECTION=192.168.0.157 49318 192.168.0.235 22
    LESSOPEN=||/usr/bin/lesspipe.sh %s
    XDG_RUNTIMEDIR=/run/user/0
    HISTTIMEFORMAT=%F %T root
    =/usr/bin/env
    OLDPWD=/root
    提示:1.用set显示所有本地变量
    2.我们也可以自定义全局环境变量,
    l 用unset取消本地变量和环境变量
    例子:
    [root@yanwei-test1 scripts]# export aa=ll
    [root@yanwei-test1 scripts]# echo $aa
    ll
    [root@yanwei-test1 scripts]# unset aa
    [root@yanwei-test1 scripts]# echo $aa
    #此处为输出的空行了
    shell-的变量-全局变量

猜你喜欢

转载自blog.51cto.com/scajy/2425247