1)变量类型
1)变量可分为俩类: 环境变量(全局变量), 和普通变量(局部变量),
环境变量也称为全局变量, 可以在创建他们的 Shell 及其派生出来的任意子进程 Shell 中使用, 环境变量又可以分为自定义环境变量和 bash 内置的环境变量, 环境变量可以在命令行中设置和创建, 用户退出命令行时这些变量值就会丢失, 想要永久保存环境变量, 可在用户家目录下的. bash_profile 或. bashrc(非用户登录模式特有, 如: SSH)文件中, 或在 / etc/profile 文件中定义, 这样每次用户登录时这些变量都将被初始化.
普通变量也可成为局部变量, 只能在创建它们的 Shell 函数或 Shell 脚本中使用, 普通变量一般由开发者在开发脚本程序时创建,
2)查看设置的变量
set 命令输出所有的变量, 包括全局变量和局部变量
[root@king ~]# set
- APACHEERR=hello world
- BASH=/bin/bash
- BASH_ALIASES=()
- BASH_ARGC=()
- BASH_ARGV=()
- BASH_CMDS=()
- BASH_LINENO=()
- BASH_SOURCE=()
- BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1"
中间和结尾省略若干代码
env(printenv)命令只显示全局变量,
- [king@king~]$ env
- HOSTNAME=king
- SHELL=/bin/bash #大家可以自行查看一下哦
declare 命令输出所有的变量, 函数, 整数, 和已经导出的变量, set -o 命令显示 bashShell 的所有参数配置信息
3)自定义环境变量
如果想设置环境变量, 就要给在给变量赋值后或在设置变量时使用 export 命令, export 命令和 declare 命令的格式:
export 变量名 = value
变量名 = value ; export 变量名
declare - x 变量名 = value
小试牛刀: 定义环境变量并赋值的方法:
- export NAME=qzlking
- declare -x NAME=qzlking
- NAME=qzlking ; exprot NAME
- [root@king script]# cat /etc/profile|grep qzl
- export qzl='qzlking' #<== 编辑 / etc/profile, 然后输出此行并保存
- [root@king script]# source /etc/profile #<== 或./etc/profile 使其生效
- [root@king script]# echo $qzl #<== 在变量前加 $ 符号并打印变量值
- qzlking
- [root@king script]# env|grep qzl #<== 查看定义结果
- qzl=qzlking
我们一起来看一下让环境变量永久生效的常用配置文件
a)用户环境变量配置
- [root@king scripts]# ls /root/.bashrc
- /root/.bashrc
- [root@king scripts]# ls /root/.bash_profile
- /root/.bash_profile
说明: 对于用户的环境变量设置, 常见的是用户家目录下的. bashrc 和. bash_profile.
b)全局环境变量的配置
常见的全局环境变量配置文件,/etc/profile;/etc/bashrc;/etc/profile.d 这三个配置文件, 如果想要在登陆后初始化或者显示加载的内容, 只需要把脚本文件放在 / etc/profile.d 文件下即可(不需要加执行权限).
在 Java 环境中, 自定义环境变量, 通常放在 / etc/profile 全局环境变量里哦,
- 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
4)查看 / 取消环境变量
我们通常在工作中要查看一下环境变量中都配置了什么, 需要做什么更改, 所以我们就有了 ehco 或 printf 命令来打印查看环境变量.
$HOME: 用户登录时进入的目录
$UID: 当前用户的 uid( 也就是用户的标识, 相当于人的身份证)相当于 id -u
- [king@king ~]$ echo $HOME
- /home/king
- [king@king ~]$ echo $UID
- 300
我们可以用 unset 来消除本地变量和环境变量
- [king@king ~]$ echo $USER
- nane
- [king@king ~]$ unset $USER
- [king@king ~]$ echo $USER #<这里输出是个空行
小结:
变量名一定要大写, 可以在自身的 Shell 及子 Shell 中使用, 常用 export 来定义环境变量
执行 enc 默认可以显示所有的环境变量名称及对应的值
输出时用 "$ 变量名", 取消用 "unset 变量名"
2)环境变量初始化与对应文件的生效顺序
1. 登陆 Shell 读取环境变量文件的流程
用户登录系统后首先会加载 / etc/profile 全局环境变量文件, 加载完后, 执行 / etc/profile.d 目录下的脚本文件 (如: 系统的字符集设置 / etc/sysconfigil8n), 然后在运行 $HOME/.bash_profile(用户环境变量文件), 在这文件里会找 $HOME/.bashrc(用户环境变量文件), 有就执行, 没有就不执行. 在 $HOME/.bashrc 找 / etc/bashrc(全局环境变量文件) 有就执行, 没有就不执行. 如果希望用户的 Shell 不是登陆时启动的 (如: 手动敲下 bash 时启动或者远程 SSH 连接情况), 非登陆 Shell 只会加载 $HOME/.bashrc(用户环境变量文件), 并会去找 / etc/bashrc(全局环境变量文件). 即非登陆 Shell 想读到设置的环境变量, 需要将变量设定等写入 $HOME/.bashrc(用户环境变量文件) 或 etc/bashrc(全局环境变量文件)不是 $HOME/.bash_profile 或 / etc/profile...
3)定义本地变量
1)普通变量的定义, 有三种写法
变量名 = value #不加引号时, 值里有变量的会被解析后输出.
变量名 ='value' #输出变量内容时单引号里是什么就输出什么, 不管什么都原样输出.
变量名 ="value" #输出变量内容时引号里的变量和命令经过解析后输出.
2)命令结果作为的变量内容来赋值
变量名 =`mkdir` #这里是反引号,
变量名 =$(mkdir) #把命令 $()括起来, 来赋值.
4)变量定义的技巧总结
变量名只能为字母, 数字或者下划线, 只能以字母或下划线开头, 要见名知意.
一般变量的定义, 赋值常用双引号, 希望原样输出的加单引号.
希望变量的内容是命令的解析结果时, 要用反引号 ``, 或者用 $()把命令括起来在赋值
打印输出或使用变量时, 变量名前要接 $ 符号.
变量定定义示例:
- KingAge=25 #<== 每个单词的首字母大写的写法
- king_age=25 #<== 单词之间用 "_" 的写法
- kingAgeSex=25 #<== 驼峰语法: 首个单词的首字母小写, 其余单词首字母大写
- kingAGE=25 #<== 单词全大写的写法
来源: https://www.cnblogs.com/liang-io/p/9825363.html