>[success] # 变量作用域
~~~
1.跟其他编程语言一样变量也存在作用域
2.Shell 变量的作用域可以分为三种:
2.1.有的变量只能在函数内部使用,这叫做局部变量(local variable);
2.2.有的变量可以在当前 Shell 进程中使用,这叫做全局变量(global variable);
2.3.而有的变量还可以在子进程中使用,这叫做环境变量(environment variable)。
~~~
>[danger] ##### 局部变量
~~~
要想变量的作用域仅限于函数内部,可以在定义时加上local命令,此时该变量就成了局部变量。请看下面的代码:
#!/bin/bash
#定义函数
function func(){
local a=99
}
#调用函数
func
#输出函数内部的变量
echo $a
输出结果为空,表明变量 a 在函数外部无效,是一个局部变量。
~~~
>[danger] ##### Shell 全局变量
~~~
1.在 Shell 中定义的变量,默认就是全局变量。
2.开一个 Shell 窗口,定义一个变量 a 并赋值为 99,然后打印,这时在同一个 Shell 窗口中是可正确打印变量
a 的值的。然后再打开一个新的 Shell 窗口,同样打印变量 a 的值,但结果却为空,这说明全局变量 a 仅仅在定义它
的第一个 Shell 进程中有效,对新的 Shell 进程没有影响
3.打开一个 Shell 窗口就创建了一个 Shell 进程,打开多个 Shell 窗口就创建了多个 Shell 进程,每个 Shell 进程都
是独立的,拥有不同的进程 ID
~~~
>[danger] ##### Shell 环境变量
~~~
1.自定义环境变量,'export 变量名=变量值',使用export命令将全局变量导出,那么它就在所有的子进程中也有效了,
环境变量被创建时所处的 Shell 进程称为父进程,如果在父进程中再创建一个新的进程来执行 Shell 命令,那么这个
新的进程被称作 Shell 子进程。当 Shell 子进程产生时,它会继承父进程的环境变量为自己所用,所以说环境变量可
从父进程传给子进程
2.创建 Shell 子进程最简单的方式是运行 bash 命令
3.注意这里说的是子进程,而不是像'Shell 全局变量' 中说的那样新开窗口,而是使用base命令
4.通过 export 导出的环境变量只对当前 Shell 进程以及所有的子进程有效,如果最顶层的父进程被关闭了,
那么环境变量也就随之消失了,其它的进程也就无法使用了,所以说环境变量也是临时的
~~~
~~~
[c.biancheng.net]$ a=22 #定义一个全局变量
[c.biancheng.net]$ echo $a #在当前Shell中输出a,成功
22
[c.biancheng.net]$ bash #进入Shell子进程
[c.biancheng.net]$ echo $a #在子进程中输出a,失败
[c.biancheng.net]$ exit #退出Shell子进程,返回上一级Shell
exit
[c.biancheng.net]$ export a #将a导出为环境变量
[c.biancheng.net]$ bash #重新进入Shell子进程
[c.biancheng.net]$ echo $a #在子进程中再次输出a,成功
22
[c.biancheng.net]$ exit #退出Shell子进程
exit
[c.biancheng.net]$ exit #退出父进程,结束整个Shell会话
~~~
>[danger] ##### 查看环境变量
~~~
1.'env'
2.输出常见的环境变量
echo $HOSTNAME
echo $SHELL
echo $HISTSIZE
echo $SSH_CLIENT
echo $USER
~~~
* 常用环境变量
![](https://img.kancloud.cn/be/2a/be2a29c8bf7e4d35f6da3e347a862312_597x169.png)
| 变量名 | 含义 | 示例 |
| --- | --- | --- |
| HOSTNAME | 主机名 | HOSTNAME=localhost |
| SHELL | 当前的shell | SHELL=/bin/bash |
| HISTSIZE | 历史命令条数 | HISTSIZE=1000 |
| SSH\_CLIENT | 当前操作环境如果是用SSH连接的话,这里会记录客户端IP | SSH\_CLIENT=192.168.1.100 57596 22 |
| USER | 当前登录的用户 | USER=root |
>[info] ## 参考
[# Shell变量的作用域:全局变量、环境变量和局部变量](http://www.beylze.cn/shell/703.html)
- 安装-VMware 虚拟机
- 远程连接
- Windows -- wsl
- Linux -- 认识 Linux 和操作系统
- Linux -- Linux 和 windows 对比
- Linux -- 命令提示符
- Linux -- 文件目录
- Linux -- 文件类型
- Linux -- 绝对和相对路径
- Linux -- 常用快捷键
- Linux -- 三种帮助命令
- 帮助命令 -- man
- 帮助命令 -- help
- 帮助命令 -- info
- Linux -- 指令
- alias -- 设置别名
- history -- 查看历史命令
- cd -- 更改目录(切换文件夹)
- pwd -- 打印目录
- ls -- 列出文件内容
- mkdir -- 创建文件夹
- rmdir -- 删除一个空的目录
- touch -- 创建普通文件/修改时间
- cp -- 复制粘贴
- mv -- 移动和重名
- rm -- 删除
- cat/tac -- 查看纯文本文件
- more/less -- 分页读取信息
- head -- 从文本开头查看
- tail -- 从文本结尾查看
- cut -- 提取片段
- sort -- 排序
- uniq -- 去重
- wc -- 统计文件的行数、单词、字节数
- tr -- 替换、缩减或删除字符
- find -- 文件查找
- grep -- 文件当中匹配字符
- 管道 -- |
- locate -- 第三方文件查找
- whereis -- 查找二进制/源代码文件 路径
- which -- 查找环境变量
- 压缩和解压
- ln -- 链接
- wget -- 下载指定的url资源
- 重定向 -- << /< />/> >
- 逻辑控制 -- &&
- echo -- 输出指定内容
- date/cal -- 查看日期和日历
- Linux -- 进程管理
- Linux-- ps 指令
- vi/vim - 文本编辑器
- 更多
- Linux-- 开关机命令
- Liunx -- 退出登录
- Linux-- 查看登录用户信息
- Linux -- 环境变量
- Linux -- 用户
- Linux -- 文件管理
- 文件权限设置 -- chmod
- 更改文件的拥有者 -- chown
- 默认权限 -- umask
- Linux -- 用户
- 新建/删除用户 -- useradd/userdel
- 修改用户属性 -- usermod/chage
- 新建/删除用户组 -- groupadd/groupdel
- 用户切换 -- su/sudo
- 用户/用户组的配置文件
- 用户家目录被删除解决
- last、 lastlog命令查看用户详细的登录信息
- Linux -- shell
- Linux -- 管道符号
- shell -- 执行
- shell -- 变量
- shell -- 字符串
- shell -- 数组
- Shell -- declare 设置变量属性
- shell -- 数学计算
- shell -- 变量作用域
- shell -- 位置参数变量
- shell -- read
- shell - if 语句
- shell -- test
- shell -- case
- Linux -- 循环
- Linux -- 软件包管理