知识储备


  • 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

编辑的配置文件如何生效?


  1. 重新登录即可;

  2. 让当前的shell进程重新读取配置文件

          #source /PATH

            # .   /PATH

注意:可能有副作用,不小心读多次会追加的,如果你能确保只读了一次,可以忽略此副作用