Linux变量分类
在 Linux Shell 中,变量主要有两大类:
环境(系统)变量用户定义变量
每种类型的变量依据作用域不同,又分为全局变量和局部变量
全局变量作用在整个 Shell 会话及其子 Shell局部变量作用在定义它们的进程及其子进程内
常见内置变量
环境(系统|内置)变量

su切换用户时加载变量的过程
su - root 加载的变量
su - 会完全切换用户,加载用户的环境变量
添加新变量时要添加export才能全局生效

su 不加载之前用户的变量
su依然使用之前用户的环境变量

查看变量
使用 printenv 查看全局变量
# 查看全局变量
printenv

查看常用的的环境变量
# 查看$PATH列表
## 查看所有命令的搜索路径
echo $PATH

# 查看用户的主工作目录
echo $HOME

# 查看保存历史命令的条数
echo $HISTSIZE
# 查看当前登录用户名
echo $LOGNAME
# 查看当前用户使用的shell种类
echo $SHELL
export显示当前系统定义的所有环境变量
参考: https://www.cnblogs.com/amboyna/archive/2008/03/08/1096024.html
https://cloud.tencent.com/developer/article/1758884
# 显示当前系统定义的所有环境变量
export
# 列出当前的环境变量值
export -p

env 显示当前用户的变量;
# 查看所有环境变量
env|more

set 显示当前shell变量,shell变量包含用户变量
使用 set 查看某个特定进程中的所有变量,包括局部变量、全局变量以及用户定义变量
# 可以查看更多变量,包括预定义变量和位置变量
set|more

添加PATH变量
全局修改–修改/etc/profile文件:----不建议
vi /etc/profile
# 在里面加入:
export PATH=$PATH:/home/uusama/mysql/bin
# 生效/etc/profile配置
source /etc/profile
# 查看$PATH
echo $PATH

Linux变量配置文件
参考:https://mp.weixin.qq.com/s/WHTAezINpwQpbObf-ivyGw
全局配置文件:
/etc/profile/etc/profile.d//etc/bashrc/etc/environment-----系统级别的全局环境变量文件
# /etc/environment
## 格式为 KEY=VALUE
JAVA_HOME="/usr/lib/jvm/java-11"
LANG="en_US.UTF-8"
用户配置文件:
~/.bash_profile~/.bashrc
~/.bashrc 和~/.bash_profile ,这两个文件的区别为:
.bash_profile是交互式login方式进入bash shell运行,..bashrc是交互式no-login方式进入bash shell运行。
可以理解为.bash_profile文件只会在用户登录的时候读取一次,
而.bashrc在每次打开终端进行每次新会话时都会读取。
持久化配置变量–修改~/.bashrc
vi /root/.bashrc 只对root用户生效。
# 在里面加入:
export PATH=$PATH:/home/uusama/mysql/bin
# 生效~/.bashrc配置
source ~/.bashrc
# 查看$PATH
echo $PATH
# 看看输出里面是不是已经有了/home/uusama/mysql/bin这个路径了。

修改变量
在 .bash_profile 或 .bashrc 中添加 export 语句,永久修改变量
export常用参数
-f 代表[变量名称]中为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量。
# 列出当前的环境变量值
export -p
提升到全局变量 export
参考: https://www.runoob.com/linux/linux-comm-export.html
# 定义变量
变量名=变量值
# 提升为全局变量
export 变量名
删除变量
unset 删除一个环境变量,如:
unset NAME;

将变量设为只读
readonly 设置环境变量只读,如:
# 将变量设置只读
## 只读变量unset无效
## 只读变量无法修改变量值
readonly NAME

删除只读变量
# 安装gdb
yum install gdb -y
# 删除只读变量
cat << EOF | gdb
> attach $$
> call unbind_variable("要删除的变量名")
> detach
> EOF
# 修改变量的值
name=zhangsan
# 打印变量的值
echo $name
# 删除变量
unset $name

Linux配置proxy
全局proxy
Centos7的/etc/environment文件不支持socks5代理配置
[root@rhel8 ~]# cat /etc/environment
all_proxy="http://proxy-dmz.ibm.com:912"
no_proxy="ibm.com,10.166.30.64,ar09-12-wp,ar09-12-wp.cluster.local,10.166.30.85,ar09-10-wp,ar09-10-wp.cluster.local,127.0.0.1,10.166.30.64,10.166.30.85,127.0.0.1,localhost,.svc,10.233.0.0/22,10.244.0.0/16,.cluster.local"
# 这是github的token变量
github_token=gho_jxxxxx
在~/.bashrc中配置
socks5h 表示远程解析 dns,如果直接写 socks5 是本地解析 dns
# 全局走的http_proxy
export all_proxy="http://admin:nihao123@proxy.ibm.com:443"
# 全局走的socks_proxy
export all_proxy="socks5h://admin:nihao123@proxy.ibm.com:443"
终端proxy
参考: Linux 让终端走代理的几种方法
socks5h 表示远程解析 dns,如果直接写 socks5 是本地解析 dns
# 全局走的代理
export all_proxy="socks5h://127.0.0.1:1080"
设置别名快速开启终端proxy和取消终端proxy,写入.bashrc文件中即可.
alias setproxy="export ALL_PROXY=socks5h://127.0.0.1:1080"
alias unsetproxy="unset ALL_PROXY"
Shell变量
Shell变量命名规则
变量名由数字、字母、下划线组成,必须以字母或者下划线开头,不能使用 Shell 里的关键字。
- 不能以数字开头
- 不能以特殊符号开头
- 可以以下划线开头
- 见名知义
Shell变量分类
| 类别 | 子类 | 说明 | 示例 |
|---|---|---|---|
| 1. 环境变量(Environment Variables) | — | - 由系统或用户导出(export) - 可被子进程继承 - 通常大写命名 - 包含系统路径、用户信息等 | PATH, HOME, USER, LANG |
| 2. 普通变量(Local / Shell Variables) | — | - 脚本或 Shell 中自定义的变量 - 仅在当前 Shell 进程有效,不被子进程继承 - 无需声明,直接赋值 | name="Tom", count=10 |
| 3. 特殊变量(Special Variables) | 位置参数 | 表示脚本或函数的命令行参数 | $0(脚本名), $1, $2, …, $9, ${10} |
| 状态变量 | 表示上一条命令的退出状态 | $?(0=成功,非0=失败) | |
| 进程 ID | 当前 Shell 或脚本的进程号 | $$(当前 PID), $PPID(父进程 PID) | |
| 参数统计 | 传递给脚本/函数的参数个数 | $# | |
| 所有参数 | 所有位置参数的集合 | $*(整体字符串), $@(独立参数列表) | |
| 4. 变量扩展与操作(Parameter Expansion) | 变量默认值 | 若变量未定义或为空,使用默认值 | ${var:-default} |
| 变量截取/替换 | 对变量值进行字符串操作 | ${var#pattern}, ${var%pattern}, ${var/pattern/replacement} | |
| 变量长度 | 获取变量值的字符长度 | ${#var} |
Shell变量常用操作
shell变量赋值
shell变量赋值=前后是没有空格的
# 变量赋值
var=123

shell变量取值
shell通过$取变量的值
# 打印变量值
echo $var

把命令的执行结果接受为变量
# 把命令作为变量
变量名=$(命令)
# 打印结果
echo $变量名



4064

被折叠的 条评论
为什么被折叠?



