知识储备
Shell是交互式命令解释器,用户是不允许直接访问内核和操作的,那么Shell就是这样一个中间件,他负责对用户输入的命令做语法分析、语义分析,判断要做什么样的操作,有哪些增强功能选项,操作什么样的对象,并且通过自身提请内核启动进程,是一个用户和内核的代理人;
广义的Shell包含GUI和CLI,而狭义的Shell仅仅指的是CLI;
Linux支持众多Shell实例,如tsh、zsh等等,使用最广泛的是Bash[众多Shell中的一个实例];
请注意,shell自身是一个命令环境,那么shell中自然可以嵌套shell,默认CentOS中登录后使用的是Bash,如果在CLI中继续输入zsh,那么你所属的环境就是-->bash-->zsh,请注意你的位置哦。
Bash环境配置文件分类
什么是变量?
变量本质上是内存空间中的一块指定区域,其数据内容会发生变化;
变量名本质是个指针,指向这个数据变化的内存空间,那么在命令执行或者操作时,只需要通过变量名,就能够随时调用那个变化的数据,很方便
变量的类型
在Linux中,大体上变量有5种类型
环境变量:作用范围是当前Shell进程和其子Shell进程
本地变量:仅作用域当前Shell进程
局部变量:仅作用当前Shell进程中的某个代码片段[通常是函数上下文]
位置变量:形如$1 $2等,主要是为了Bash脚本传递参数
特殊变量:$? 可以查看上一条命令的执行状态[请区分执行结果和执行状态不是一回儿事]
如何定义与撤销变量?
之前说过,Bash是Shell的一个实例,自身就是一个命令环境,那么他本身也包含内置变量,这些变量我们可以通过#man bash中来查看,可以使用/Variables来快速找到变量;
由于Bash是弱类型的编程语言,变量可以未经生命直接使用,只不过是Empty值罢了;
定义本地变量
Name=Value
使用set可以查看定义的本地变量
定义环境变量
Export Name=Value
Declare -x Name=Value
使用env、printenv、export可以查看定义的环境变量
撤销变量
unset Name即可
变量的生存周期就是当前的Shell进程,进程终止变量自然终止
如何引用变量?
${name} 通常{}可省略,但是有时候出于特殊目的,是不可以省略的,比如下面的情况
想新增环境变量而不想覆盖原有变量也是这个道理
export PATH=”$PATH:/usr/test/bin”
‘‘单引号,强引用,不会发生变量替换
""双引号,弱引用,会发生变量替换
Shell登录类型与Bash配置文件作用次序
Shell登录类型大致有2种:
交互式登录
直接通过Console、VTY、ssh等连接方式以输入账号密码的形式登录进系统;
通过#su -l UserName实现的切换用户,请注意-l是以login形式
非交互式登录
GUI界面下打开的终端窗口;
执行脚本:编写脚本必须在开头指定shell,脚本执行会自动打开该shell
通过#su Username实现的无参数切换用户
Bash配置文件作用次序
交互式登录
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile -->~/etc/bashrc --> ~/.bashrc
非交互式登录
~/.bashrc ---> /etc/bashrc ---> /etc/profile.d/*.sh
编辑的配置文件如何生效?
重新登录即可;
让当前的shell进程重新读取配置文件
#source /PATH
# . /PATH
注意:可能有副作用,不小心读多次会追加的,如果你能确保只读了一次,可以忽略此副作用
本文出自 “蓝色仓库” 博客,请务必保留此出处http://bluebox.blog.51cto.com/8852456/1691812
原文地址:http://bluebox.blog.51cto.com/8852456/1691812