一、什么是Shell环境变量
1、什么是环境变量
环境变量一般是指用export内置命令导出的变量,用于定义Shell的运行环境,保证Shell命令的正确执行
环境变量可以在命令行中设置和创建,但用户退出命令行时这些变量值就会丢失
如果希望永久保存环境变量,可在用户家目录下的.bash_profile或.bashrc(非用户登录模式特有,例如远程SSH)文件中,或者全局配置/etc/bashrc(非用户登录模式特有,例如远程SSH)或/etc/profile文件中定义
在将环境变量放入上述的文件中后,每次用户登录时这些变量都将被初始化
按照系统规范,所有环境变量的名字均采用大写形式
在将环境变量应用于用户进程程序之前,都应该用export命令导出定义,
例如:正确的环境变量定义方法为export OLDGIRL=1
有一些环境变量,比如HOME、PATH、SHELL、UID、USER等,在用户登录之前就已经被/bin/login程序设置好了
通常环境变量被定义并保存在用户家目录下的.bash_profile文件或全局的配置文件/etc/profile中
2、通过3个变量来查看设置的变量的值
set、env、declare
set命令输出所有变量(全局变量和局部变量)
env只显示全局变量
declare输出所有的变量、函数、整数和已经导出的变量
[root@Linux myshell]# env|tail PWD=/root/myshell LANG=en_US.UTF-8 OLDBOY=oldboy HISTCONTROL=ignoredups SHLVL=1 HOME=/root LOGNAME=root LESSOPEN=||/usr/bin/lesspipe.sh %s XDG_RUNTIME_DIR=/run/user/0 _=/usr/bin/env
[root@Linux myshell]# declare|tail SHELL=/bin/bash SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor SHLVL=1 TERM=xterm-16color UID=0 USER=root XDG_RUNTIME_DIR=/run/user/0 XDG_SESSION_ID=69360 _= colors=/root/.dircolors
[root@Linux myshell]# set|tail SHELL=/bin/bash SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor SHLVL=1 TERM=xterm-16color UID=0 USER=root XDG_RUNTIME_DIR=/run/user/0 XDG_SESSION_ID=69360 _= colors=/root/.dircolors
二、自定义环境变量
1、设置环境变量 3种方式
export 变量名=value
变量名=value; export 变量名
declare -x 变量名=value (此处不要在变量名前面加$)
实例:3种定义环境变量的例子
[root@Linux myshell]# export NAME=shell [root@Linux myshell]# declare -x NAME=shell [root@Linux myshell]# NAME=shell ; export NAME [root@Linux myshell]# echo $NAME shell
实例:自定义全局环境变量
[root@Linux myshell]# cat /etc/profile | grep OLD # <== 编辑/etc/profile ,然后输出此行并保存 [root@Linux myshell]# export OLDBOY='oldboy' # <== 或. /etc/porfile 使其生效 [root@Linux myshell]# source /etc/profile [root@Linux myshell]# # <== 在变量前加$符号并打印变量值 [root@Linux myshell]# echo $OLDBOY oldboy # <== 查看定义结果 [root@Linux myshell]# env|grep OLDBOY OLDBOY=oldboy
设置环境变量——export命令
自己定义的变量并不会自动成为环境变量,要想设置环境变量,需要使用export命令
[root@VM-4-2-centos myscript]# CONFIG_FILE=/home/miyake/conf.txt [root@VM-4-2-centos myscript]# export CONFIG_FILE
上述环境变量设置也可以写成一行:
export CONFIG_FILE=/home/miyake/conf.txt
2、其他环境变量
BASH: 保存bash 全路径 BASE_VERSION: 保存当前bash命令的版本信息 LINENO:保存当前所执行的脚本文件的行号 LANG :设置当前的国家/地区和语言等信息 中文环境下的变量LANG echo $LANG 将LANG设置为美国的英文环境 $.UTF-8 locale:查看当前的地区设置 PATH :保存的是shell启动命令时的目录,目录以字符串的形式指定,不同的目录位置通过冒号来分隔。 IFS:用于设置shell中的分隔符
三、让环境变量永久生效的常用设置文件
1、用户的环境变量配置
提示: 对于用户的环境变量设置,比较常见的是用户家目录下的.bashrc和.bash_profile
#<== 推荐在此文件中优先设置 [root@Linux myshell]# ls /root/.bashrc /root/.bashrc [root@Linux myshell]# ls /root/.bash_profile /root/.bash_profile
2、全局环境变量的配置
/etc/profile /etc/bashrc #<==推荐优先在此文件中设置 /etc/profile.d
若要在登录后初始化或显示加载内容,则把脚本文件放在/etc/profile.d/下即可(无须加执行权限)
四、设置登录提示的2种方式
1、第一种是在/etc/motd里增加提示的字符串
# cat /etc/motd Welcome to Alibaba Cloud Elastic Compute Service !
修改登录后提示如下:
Last login: Fri Oct 28 10:57:17 2022 Welcome to zth Cloud Elastic Compute Service !
2、在/etc/profile.d/下面增加如下脚本
[root@oldboy ~]# cat /etc/profile.d/oldboy.sh #<==这里是脚本的内容 echo " Here is oldboy training "
登录后显示如下:
Last login : Fri Nov 7 15 :36 :56 2016 from 10.0.0.100 Here is oldboy training
如下在java环境中,自定义环境变量
export JAVA_HOME=/application/jdk export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin export RESIN_HOME=/application/resin
五、显示与取消环境变量
1、通过echo或printf命令打印环境变量
常见的系统环境变量:
$HOME:当前用户主目录的全路径
$UID:当前用户的UID(用户标识),相当于id -u
$PWD:当前工作目录的绝对路径名
$SHELL:当前登录shell的全路径
$USER:当前用户
实例:通过echo和printf 打印环境变量
[root@VM-4-2-centos myscript]# echo $HOME /root [root@VM-4-2-centos myscript]# echo $PWD /root/myscript [root@VM-4-2-centos myscript]# echo $SHELL /bin/bash [root@Linux ~]# printf "$HOME\n" /root
2、用env或set显示默认的环境变量
env(printenv) 查看当前的环境变量列表
[root@VM-4-2-centos myscript]# printenv XDG_SESSION_ID=267526 HOSTNAME=VM-4-2-centos TERM=xterm ...
用set也可以显示环境变量(包括局部变量)
[root@Linux ~]# set BASH=/bin/bash BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() ...
3、用unset消除本地变量和环境变量
[root@Linux ~]# echo $USER root [root@Linux ~]# unset USER [root@Linux ~]# echo $USER
六、环境变量总结
变量名通常要大写
变量可以在自身的shell及子shell中使用
常用export 来定义环境变量
env默认可以显示所有的环境变量
输出变量 $变量名 取消变量 unset 变量名
书写crond定时任务时要注意,脚本要用到的环境变量最好先在所执行的Shell脚本中重新定义
如果希望环境变量永久生效,则可以将其放在用户环境变量文件或全局环境变量文件里