Linux 之 Bash -- shell 的变量功能(二)
由于这部分的内容有点多,挤在一篇文章里不容易理清思路,长篇幅也容易使人倦怠,那么猫毛就把它切分成小的知识块,咱们就从这些细碎的小文章中,一点点成长吧~
1.环境变量的功能
1.1 常见的环境变量
在命令行内输入 “env”,就可以查看目前shell环境下的所有环境变量与其内容。猫毛充分利用了MAC笔记本的Terminal,利用它来练手BASH了:
环境变量
- HOME
代表用户的家目录,还记得 Linux 系统基本操作 中,我们可以通过cd
或者cd ~
直接回到自己的home目录,就是取用了HOME变量。 - SHELL
其内容代表目前环境使用的SHELL是哪支程序,猫毛的MAC使用的是 /bin/bash - PATH
与文件搜索有关,它就是执行 文件搜索 的路径!
不同目录以:
分隔,文件的搜寻顺序是依序由PATH的变量内的目录来查询,所以,目录的顺序在高效搜索文件时就显得非常重要了 - LANG
代表语系数据,一般来说,我们中文编码通常是zh_TW.Big5 或者 zh_TW.UTF-8
1.2 环境变量与自定义变量
👆我们通过env
可以获取当前的环境变量信息,除了环境变量,bash还有一些与bash操作接口有关的变量,以及用户自己定义的变量(还记得上一节提到的“变量设定”吗?设定变量就是在自定义变量啊~)
如果我们想查看当前shell的所有变量信息,仅仅通过“env”获取环境变量就不能满足我们的“好奇心”了,那就要通过“set”来观察了。
命令行中输入set
后,屏幕里密密麻麻就出现了一大堆符号,还是拿鸟哥里面的图片来做解释吧:
一般来说,不论是环境变量还是与shell操作接口 相关的变量,通常都设定为大写字符。基本上,在Linux预设的情况下,使用{大写的字母}来设定的变量为系统内定需要的变量。这也是为什么我们上一节在学习“变量设定”时,鼓励大家使用小写字母来设定自定义变量的原因,讲几个其中比较重要的变量吧。
-
PSI 提示字符的设定
-- \d : 可显示出日期格式
-- \H : 完整的主机名
-- \h : 仅取主机名在第一个小数点之前的名字
-- \t :显示时间,为24小时格式的「HH:MM:SS」
-- \T : 显示时间,为12小时格式的「HH:MM:SS」
-- \A : 显示时间,为12小时格式的「HH:MM」
-- \u : 显示使用者的账号名称
-- \w :完整的工作目录名称
-- \W : 利用 basename 函数取得工作目录名称,所以仅会列出最后一个目录名
-- # : 下达的第几个指令
-- $ :提示字符,如果是root时,提示字符为#,否则就是$了
怎么更改自己登陆服务器后的提示符?以图为例吧:
示例 :设置提示符 - $
“$” 本身也是个变量,它代表的是“目前这个shell的线程代号”,也就是所谓的PID(Process ID),如果想知道我们的shell的PID,直接输入命令$$
就可以了。 - ?
? 也是一个特殊的变数,这个变数是:上一个执行的指令 回传的值
当我们执行某些指令时,这些指令都会回传一个执行后的代码。一般来说,如果成功得执行该指令,会回传一个0值(说明没有出现问题),如果执行发生错误,就会回传“错误代码”,一般都是非0数值。通过图中的示例你会理解得更方便:
理解“ ?”这个变数
1.3 自定义变量转成环境变量 (export)
当你登入Linux并取得一个bash之后,你的bash就是一个独立的程序,这个程序的识别使用的是一个称为程序标识符的东西,也就是PID。接下来你在这个bash底下所下达的任何指令都是由这个bash所衍生出来的,那些被下达的指令就被称为子程序了。
子程序仅会继承父程序的环境变量,子程序不会继承父程序的自定义变量,所以需要 export 变量名称
,将自定义变量转成环境变量。
1.3 语系变量
我们的Linux到底支持了多少语系?可以使用"locale"这个命令来查询:
用locale查询语系变量
为什么我们在查询某个数据的说明文件的时候,有时候会出现乱码,这可能是由于我们使用的语系不同而产生的,可以看到上图👆,猫毛的mac自带bash的语系变量有很多,但是实际上,我们只需要设定"LANG"和“LC_ALL”就好了。(语系文件都放置在 user/lib/locale/目录中)
1.4 变量的有效范围
自定义变量是有使用范围的:自定义变量只能存在于指定子程序中,其他子程序和父程序是不可以引用的。
可以这么理解:
环境变量=全局变量 global variable
自定义变量=局部变量 local variable
但是,export这个指令,可以使“自定义变量” 转变为 “环境变量”。环境变量是可以被父程序和其他子程序引用的。
1.5 理解几个与变量相关的命令
简单理解一下吧,我觉得应用并非很广泛
-
read
作用就是自定义变量,最大的特点便是可以与使用者对谈,什么是“对谈”?截鸟哥的图理解吧。
read的用法 - declare
declare 的功能:宣告变量的类型。
它一般来讲是这么使用的:
declare + 参数 + 变量
它的参数有以下几种:
-a : 将后面的变量定义为 数组 (array)类型
-i : 将后面的变量定义为 整数数字 (integer)类型
-x : 用法与export一样,将后面的自定义变量 变成 环境变量
-r : 将变量设定称为 readonly 类型,该变量不可以 被更改内容 和 unset
(1) 先来学习一下 -i 的用法吧:
declare -i 的用法
想知道为什么是吧?
实际上,变量类型默认为“字符串”,所以只有通过' -i '指定变量类型为 整数数字 后,系统才会认为“1+2” 是“计算式”而不是“字符串”
bash环境中的数值运算,预设最多仅能到达整数形态
eg: 6/5结果是1
(2) 其他几个参数的应用
鸟哥总结的很好,直接上鸟哥的图吧
declare 参数的使用示例
1.6 数组(array)变量类型
这里只要了解一下数组这个变量就可以了
var[index]=content
var -- 数组名
index -- 数字代号(需要[ ]设定)
content -- 对应内容
2. 文件系统及程序的限制关系
了解 ulimit 命令可以限制用户的某些系统资源 就可以了
ulimit的使用