文章目录
变量?
顾名思义,变量变量就是可以变化的量!当然这是一句废话!
举例:
当我们想使用内存空间中的字符串“aaa”的时候,那么在内存空间中就有一个这个字符串“aaa”的地址,在计算机里,存放数据都为二进制格式“010101…”,对于计算机来说,使用“010101…”这个地址很简单,但是对于我们用户来说,那么多字符串的地址我们怎么可以记得住,为了方便就使用变量!
格式: 值类型 varname=“值”(静态语言)
或
varname=“值”(动态语言)
变量的赋值:
①、静态语言 或 强类型
在使用变量的时候,必须声明 变量的类型。
eg: C++、java…
int varname=100;
int 大家都知道是指定 "整数类型" 的一个 "函数"
②、动态语言 或 弱类型
在使用变量的时候,不需要声明 变量的类型。 变量的类型一般就是被赋值的那个值的类型!
eg:Python、PHP、shell…
varname=100;
100是整数,所以这里 varname 的类型就为 int
变量名命名规则?
①、不建议使用程序中的保留字:例如 if、for…
root@zhengzelin:~# type if
if is a shell keyword(关键字)
"可以使用,但是不建议使用。"
②、只能使用数字、字母、下划线,不能使用数字开头
root@zhengzelin:~# n1=aaa (√)
root@zhengzelin:~# 1n=aaa (×)
1n=aaa: command not found
root@zhengzelin:~# n?=aaa (×)
n?=aaa: command not found
③、驼峰命名法
在命名变量名的时候,每个人的格式不一样;假如定义一个变量名为 my name ,
可能出现的格式:myname、my_name、MyName或者myName。
这样的命名规则不适合所有程序员阅读,而利用驼峰命名法来表示,可以增加程序可读性。例如:
"大驼峰" —— 所有单词的首字母都大写: myname = MyName
"小驼峰" —— 第一个单子首字母小写,后续大写:myname =myName
如果你的上头要求用什么格式写就按什么格式写,没要求就按 “驼峰命名法”
bash 中 变量的种类:
注意:这里说到了是 shell 中的 bash shell ,其他的shell有一点细微区别!
①、局部变量:
顾名思义,就是局部范围内有效,只在 当前shell进程 生效(包括其子进程都不生效)。
同理:在子shell创建的变量 ,在父shell 里也不生效!
★ 如何使用局部变量?
a=1 #这就是一个局部变量,最为简单,直接赋值即可!
★ 如何证明局部变量的生效范围?
①、首先 使用 set 命令查看所有变量:
首先,在当前shell 创建一个变量:
root@zhengzelin:~# a=1
root@zhengzelin:~# echo $a
1
root@zhengzelin:~# set | grep "^a"
a=1
②、接着 使用 bash 命令 进入当前shell 的子shell 进程:
# bash 命令是在后台执行,并不影响其他命令的使用。
root@zhengzelin:~# echo $$ # 查看当前 shell进程 的 PID号
23905
root@zhengzelin:~# bash # 再次打开一个shell进程,也就是当前shell进程的子进程
root@zhengzelin:~# echo $$ # 查看当前 shell进程 的 PID号
23921
root@zhengzelin:~# echo $PPID # 查看当前shell进程的父shell进程的PID
23905
之前的 变量a 是在当前 shell进程 的父进程内命名的,
在当前shell 中查看 之前的变量 a 是否存在:
root@zhengzelin:~# set | grep ^a
[空]
"发现此时的 变量a 不复存在!证明了局部变量的范围!"
如何返回当前子shell进程 的父进程? 下面会使用:
③、然后 使用 pstree -p 来查看进程之间的树状关系图:
root@zhengzelin:~# echo $$ # 本 shell 的进程
23921
root@zhengzelin:~# echo $PPID # 父shell的进程
23905
root@zhengzelin:~# pstree -p
systemd(1) |........(省略...)
├─sshd(963)───sshd(23887)───bash(23905)───bash(23921)───pstree(23936)
可以很清楚的看见: 23905 和 23921 的关系。
④、最后 使用 exit 命令退出当前 shell进程:
返回当前 shell 进程 的父shell进程:
root@zhengzelin:~# echo $PPID
23905
root@zhengzelin:~# echo $$
23921
root@zhengzelin:~# exit
exit
root@zhengzelin:~# echo $$
23905
再次查看之前的变量a
root@zhengzelin:~# set | grep ^a
a=1
②、全局变量(环境变量):
生效范围 为 当前shell进程 及其 子shell 进程。
★ 常用的全局变量列表:
变量名 | 作用 | 用法 |
---|---|---|
PATH | 定义了 运行命令的查找路径 | echo $PATH |
HOME | 显示当前用户所在的家目录 | 同上 |
LANG | 显示当前的系统语言 | 同上 |
SHELL | 显示当前的 shell类型 | 同上 |
SHLVL | 显示当前shell进程的嵌套深度 | 同上 |
USER | 显示当前的 username | 同上 |
HISTSIZE | 输出的历史命令记录条数 | 同上 |
HISTFILESIZE | 显示 保存的历史命令记录条数 | 同上 |
PS1 | 系统登录提示符(#、$) | +1 |
… | … | … |
eg:使用 SHLVL 变量: