Shell 脚本和编程(1) | 青训营笔记

88 阅读3分钟

课程目标:

  1. Shell 基础概念
  2. 命令和语法
  3. 执行过程和原理
  4. 调试和前端集成

学习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。

2023-05-15.png

(3)构成

对于Shell的定义大概是,首先它是一个命令和显示器,其次它是能变成语言,那Shell作为显示器可以解释、执行我们的脚本和命令,同时它提供了很多类似命令,像点、方括号、echo这些我们常用到的,我们可以在终端当中输入man builtin去查看所有支持的列值命令。其次GNU组织也提供了很多核心的工具,像ls mv cat等这些默认会安装在我们电脑上,我们可以通过type命令去查看这些命令安装的路径。第三块则是第三方库,比如说node、python或者C++等封装模块。

2023-05-15 (1).png

二、命令和语法

(1)变量

Shell当中的变量可以分为三种,自定义变量是使用“=”声明,默认声明的变量都是字符串型,而Shell当中也支持整型、浮点型和日期型,需要我们手动去声明。自定义变量的作用域是在当前的shell当中。第二种是环境变量,使用export或者declare-X去声明,作用域是在当前的shell及其子shell当中生效,第三种是系统环境变量,它是在shell启动的时候加载进来的,所有shell都是共享或者是相同的。

2023-05-15 (2).png

(2)自定义变量

这里定义了page_size和page_number 2个变量,它们使用"="去赋值,但“=”的两边是不能有空格的,如果有的话,Shell会当做额外的命令。另外,可以将一个命令复制给变量,也可以将一个命令的执行结果复制给变量。如果想要声明一个整型或者进行数学运算,直接用默认字符串是不行的,我们需要使用let或者declare-i去声明total为整型,这样的话才能得到page-size*page-number的结果。

2023-05-15 (3).png