当前位置: 代码迷 >> 综合 >> Shell 变量 环境变量(全局变量)/ bash内部变量
  详细解决方案

Shell 变量 环境变量(全局变量)/ bash内部变量

热度:104   发布时间:2023-09-30 11:28:33.0

变量类型


变量可分为两类:环境变量(全局变量,用到的是比较少的)和局部变量。

环境变量也可称为全局变量,是系统预先定义好的,可以在创建它们的 shell 及其派生出来的任意子进程 shell 中使用。

比如:

[root@node1 ~]# echo $USER
root

局部变量只能在创建它们的 shell 函数或脚本中使用。

还有一些变量是用户创建的,其它的则是专用 shell 变量。

环境变量(全局变量)


环境变量用于定义 Shell 的运行环境,保证 Shell 命令的正确执行,Shell通过环境变量来确定登陆用户名、命令路径、终端类型、登陆目录等,所有的环境变量都是系统全局变量,可用于所有子进程,这包括编辑器、Shell 脚本和各类应用。

[root@localhost ~]# echo $qq
123
[root@localhost ~]# bash
[root@localhost ~]# echo $qq

定义的变量,在用户退出之后就会失效,除非将变量写死在全局的变量当中。 

环境变量可以在命令行中设置,但用户退出时这些变量值也会丢失,因此最好在用户家目录下的 .bash_profile 文件中或全局

配 置 /etc/bashrc ,/etc/profile 文件或者/etc/profile.d/中定义。将环境变量放入 profile 文件中,每次用户登录时这些变量值都将被初始化。

[root@node1 ~]# vim /etc/profile
export name=hhhh
[root@node1 ~]# source /etc/profile
[root@node1 ~]# echo $name
hhhh

传统上,所有环境变量均为大写。环境变量应用于用户进程前,必须用export 命令导出。

环境变量可用在创建他们的shell和从该shell派生的任意子shell或进程中。他们通常被称为全局变量以区别局部变量。

通常,环境变量应该大写。环境变量是已经用 export 内置命令导出的变量。

有一些环境变量,比如 HOME、PATH、SHELL、UID、USER 等,在用户登陆之前就已经被/bin/login 程序设置好了。通常环境变量定位保持在用户家目录下的.bash_profile 文件中。具体的环境变量说明请参考下表: 

Shell 变量 环境变量(全局变量)/ bash内部变量

Shell 变量 环境变量(全局变量)/ bash内部变量

 环境变量启动过程:

Shell 变量 环境变量(全局变量)/ bash内部变量

加载环境变量的顺序,首先得加载/etc/profile 

ls /etc/profile

然后这些/etc/profile.d/文件也会被加载

[root@localhost ~]# ls /etc/profile.d/
256term.csh  256term.sh  colorgrep.csh  colorgrep.sh  colorls.csh  colorls.sh  lang.csh  lang.sh  less.csh  less.sh  vim.csh  vim.sh  which2.csh  which2.sh

然后是用户级别的环境变量加载

[root@localhost ~]# ls -a
.bash_profile 

环境变量文件说明:

Shell 变量 环境变量(全局变量)/ bash内部变量

/etc/下的环境变量文件是对所有用户生效,而用户家目录下的环境变量文件仅对家目录所对应的用户生效。

自定义环境变量(全局变量)


设置环境变量

如果想设置环境变量,就要在给变量赋值之后或设置变量时使用 export 命令。带-x 选项的 declare 内置命令也可以完成同样的功能。(注意:输出变量名时不要在变量名前面在$)
语法:export [-fnp][变量名称]=[变量设置值]
补充说明:在 shell 中执行程序时,shell 会提供一组环境变量。 export可新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅及于该此登陆操作。
参数说明:
-f:代表[变量名称]中为函数名称。
-n:删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执
行环境中。
-p:列出所有的 shell 赋予程序的环境变量。
格式:
1、export 变量名=value
2、变量名=value;export 变量名
3、declare -x 变量名=value
提示:以上为三种设置环境变量的方法,例:
export NAME=zhang
declare -x NAME=zhang
NAME=zhang;export NAME

自定义环境变量生产环境 java 环境配置实例:tomcat,resin,csvn,hadoop

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

常见放在:/etc/profile

显示与取消环境变量


通过 echo 命令打印环境变

$HOME
用户登录时进入的目录
$UID
当前用户的 UID(用户标识)相当于 id -u。
$PWD
当前工作目录的绝对路径名
$SHELL
当前 SHELL
$USER
当前用户

.......省略若干

例子:
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# echo $UID
0
[root@localhost ~]# echo $PWD
/root
[root@localhost ~]# echo $SHELL
/bin/bash
[root@localhost ~]# echo $USER
root
用 env(printenv)或 set 显示默认系统的环境变量(下面就是系统的全局变量)  例子:
[root@localhost ~]# env XDG_SESSION_ID=3 HOSTNAME=localhost.localdomain SELINUX_ROLE_REQUESTED= TERM=vt100 SHELL=/bin/bash ........................省略若干 提示:1.用 set 显示所有本地变量 2.我们也可以自定义全局环境变量,见如下例子
用 unset 消除本地变量和环境变量  例:
[root@localhost ~]# echo $USER
root
[root@localhost ~]# unset USER
[root@localhost ~]# echo $USER
#-->此处为输出的空行

提示:这样是临时生效,要想永久生效,写到/etc/profile 文件内即可

 

 

bash 内部变量

有些内部命令在目录是看不见的,它们有的是 Shell 本身提供的,常用的内部命令有:echo、eval、exec、export、readonly、read、shift、wait、exit和点(.)

echo 变量名表
     将变量名表指定的变量显示到标准输出。
eval args
      读入参数 args,并将它们组合成一个新的命令,然后执行
exec 命令参数
        当 shell 执行到 exec 语句时,不会去创建新的子进程,而是转去执行指定的命令,当指定的命令执行完时,该进程(也就是最初的 Shell)就终止了,所以 Shell 程序中 exec 后面的语句将不再被执行。
export 变量名=value
        Shell 可以用 export 把它的变量向下带入子 Shell,从而让子进程继承父进程中的环境变量。但子 Shell 不能用 export 把它的变量向上带入父 Shell。
readonly 变量名
      只读变量 用 readonly 显示所有只读变量
read 变量名表
     从标准输入读字符串,传给指定变量