shell 变量
2022-06-26
变量定义
变量名规则
- 名称定义要做到见名知意,切按照规则来,切不得引用保留关键字 hp 检查保留字)
- 只能包含数字、字母、下划线
- 不能以数字开头
- 不能用标点符号
- 变量名严格区分大小写
环境变量设置
环境变量一般指的是用 export 内置命令导出的变量,用于定义 shell 的运行环境、保证 shell 命令的正确执行。
Shell 通过环境变量确定登录的用户名、PATH 路径、文件系统等各种应用。
环境变量可以在命令行中临时创建,但是用户退出 shell 终端,变量即丢失,
如要永久生效,需要修改环境变量配置文件
用户个人配置文件 ~/.bash_profile、~/.bashrc 远程登录用户特有文件
全局配置文件 /etc/profile、/etc/bashrc,且系统建议最好创建在/etc/profile.d/,而非直接修改主文件,修改全局配置文件,影响所有登录系统的用户
检查系统环境变量的命令
set,输出所有变量,包括全局变量、局部变量
env,只显示全局变量
declare,输出所有的变量,如同 set
export,显示和设置环境变量值
撤销环境变量
- unset 变量名,删除变量或函数。
设置只读变量
- readonly,只有 shell 结束,只读变量失效
环境变量加载顺序
变量的作用域
每次调用bash/sh解释器执行脚本,都会开启一个子shell ,因此不保留当前的 shell 变量,通过 pstree 命令检查进程树
调用 source 或者点符号,在当前 shell 环境加载脚本,因此保留变量
# 解释
[root@centos7 ~]# cat a.sh
#!/bin/bash
name=`whoami`
[root@centos7 ~]# sh a.sh
[root@centos7 ~]# echo $name
[root@centos7 ~]# source a.sh
[root@centos7 ~]# echo $name
root
[root@centos7 ~]#
因为 执行脚本时,会启用一个子shell,因此 当前 终端shell环境不能得到 子shell 的环境变量;
执行 source 时,在当前shell 加载脚本,因此会保留环境变量;
shell 中特殊变量
$0 获取 shell 脚本文件名,以及脚本路径
$n 获取 she11 脚本的第 n 个参数,n 在 1~9 之间,如$1,$2,$9,大于 9 则需要写,${10},参数空格隔开
$# 获取执行的 shell 脚本后面的参数总个数
$* 获取 shell 脚本所有参数,不加引号等同于 $@ 作用,加上引号 "$*" 作用是接收所有参数为单个字符串,"$1$2..
$@ 不加引号,效果同上,加引号,是接收所有参数为独立字符串,如"$1" "$2" "$3"... 空格保留
$() # 在括号中执行命令,且拿到命令的执行结果
${} # 变量引用
`` # 执行命令,且拿到执行结果
() # 开启子shell,执行命令
$vars # 取出变量结果
Shell 特殊状态变量
$? 上一次命令执行状态返回值,0正确,非0失败
$$ 当前 she11 脚本的进程号
$! 上一次后台进程的 PID
$_ 再次之前执行的命令,最后一个参数
查找方式 man bash
搜索 Special Parameters