课程目标:
- Shell 基础概念
- 命令和语法
- 执行过程和原理
- 调试和前端集成
学习Shell的价值:
- Linux 服务器的基本操作和管理
- 前端Node.js的进程管理、问题排查、资源监控等远程操作
- 使用shell编写TCE、SCM、Docker脚本,完成服务编译和部署
一、Shell 基础
(1)概念
- 终端:获取用户输入,展示运算结果的硬件设备。
- tty:teletypeWriter的简称,和终端等价,早期指电传印机,在Linux中是输入/输出环境。
- 终端模拟器:Mac Terminal,iTem2等,关联虚拟tty的输入/输出软件。
- Shell:command interpreter,处理来自终端模拟器的输入,并且解释执行之后输出结果给终端。
- Bash:Shell的一种具体体现。
(2)发展
Ken Thompson (来自贝尔实验室) 在 1971 年为 UNIX开发了第一个 shell,称为 V6 shell → Stephen Bourne 在贝尔实验室 为 V7 UNIX 所开发的 Bourneshell,即 sh → 开源组织 GNU 为了取代 Bourne shel1 开发的Bourne-Again shell,即 Bash
Bash除了兼容SSH大部分的特性,它还吸收了CSH和PSH的一些优点。Mac系统在最新的版本或者最近的几个版本当中都将需要切换到CSH。
(3)构成
对于Shell的定义大概是,首先它是一个命令和显示器,其次它是能变成语言,那Shell作为显示器可以解释、执行我们的脚本和命令,同时它提供了很多类似命令,像点、方括号、echo这些我们常用到的,我们可以在终端当中输入man builtin去查看所有支持的列值命令。其次GNU组织也提供了很多核心的工具,像ls mv cat等这些默认会安装在我们电脑上,我们可以通过type命令去查看这些命令安装的路径。第三块则是第三方库,比如说node、python或者C++等封装模块。
二、命令和语法
(1)变量
Shell当中的变量可以分为三种,自定义变量是使用“=”声明,默认声明的变量都是字符串型,而Shell当中也支持整型、浮点型和日期型,需要我们手动去声明。自定义变量的作用域是在当前的shell当中。第二种是环境变量,使用export或者declare-X去声明,作用域是在当前的shell及其子shell当中生效,第三种是系统环境变量,它是在shell启动的时候加载进来的,所有shell都是共享或者是相同的。
(2)自定义变量
这里定义了page_size和page_number 2个变量,它们使用"="去赋值,但“=”的两边是不能有空格的,如果有的话,Shell会当做额外的命令。另外,可以将一个命令复制给变量,也可以将一个命令的执行结果复制给变量。如果想要声明一个整型或者进行数学运算,直接用默认字符串是不行的,我们需要使用let或者declare-i去声明total为整型,这样的话才能得到page-size*page-number的结果。