当前位置:   article > 正文

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

shell 全局变量

变量类型


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

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

比如:

  1. [root@node1 ~]# echo $USER
  2. root

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

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

/etc/profile 设置环境变量(全局变量)


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

  1. [root@localhost ~]# echo $qq
  2. 123
  3. [root@localhost ~]# bash
  4. [root@localhost ~]# echo $qq

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

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

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

  1. [root@node1 ~]# vim /etc/profile
  2. export name=hhhh
  3. [root@node1 ~]# source /etc/profile
  4. [root@node1 ~]# echo $name
  5. hhhh

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

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

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

  1. export JAVA_HOME=/usr/local/jdk1.8.0_351
  2. export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  3. export GOROOT=/usr/local/go
  4. export PATH=$GOROOT/bin:$PATH
  5. export GROOVY_HOME=/usr/local/groovy-4.0.6
  6. export PATH=$GROOVY_HOME/bin:$PATH
  7. export GIT=/usr/local/git
  8. export PATH=$GIT/bin:$PATH
  9. export TF_CLI_CONFIG_FILE=$HOME/terraform/.terraformrc
  10. export M2_HOME=/usr/local/apache-maven-3.8.6
  11. export PATH=$M2_HOME/bin:$PATH
  12. export NODE_HOME=/usr/local/node-v14.16.1-linux-x64
  13. export PATH=$NODE_HOME/bin:$PATH
  14. export SCANNER_HOME=/usr/local/sonar-scanner-4.6.0.2311-linux
  15. export PATH=$SCANNER_HOME/bin:$PATH

 

 

shell 常用系统变量 


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

 环境变量启动过程:

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

ls /etc/profile

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

  1. [root@localhost ~]# ls /etc/profile.d/
  2. 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

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

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

环境变量文件说明:

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

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


设置环境变量

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

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

  1. export JAVA_HOME=/application/jdk
  2. export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  3. export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
  4. export RESIN_HOME=/application/resin

常见放在:/etc/profile

显示与取消环境变量


通过 echo 命令打印环境变

  1. $HOME
  2. 用户登录时进入的目录
  3. $UID
  4. 当前用户的 UID(用户标识)相当于 id -u。
  5. $PWD
  6. 当前工作目录的绝对路径名
  7. $SHELL
  8. 当前 SHELL
  9. $USER
  10. 当前用户

.......省略若干

例子:
  1. [root@localhost ~]# echo $HOME
  2. /root
  3. [root@localhost ~]# echo $UID
  4. 0
  5. [root@localhost ~]# echo $PWD
  6. /root
  7. [root@localhost ~]# echo $SHELL
  8. /bin/bash
  9. [root@localhost ~]# echo $USER
  10. 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 消除本地变量和环境变量  例:
  1. [root@localhost ~]# echo $USER
  2. root
  3. [root@localhost ~]# unset USER
  4. [root@localhost ~]# echo $USER
  5. #-->此处为输出的空行

提示:这样是临时生效,要想永久生效,写到/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 变量名表
     从标准输入读字符串,传给指定变量
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/215978
推荐阅读
相关标签
  

闽ICP备14008679号