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

102 阅读3分钟

1 目标

  • 学习shell基础和语法,shell执行过程和原理,shell调试和前端集成。

2 Shell 脚本和编程

  • 价值 1. Linux 服务器的基本操作和管理 2. 前端Node.js服务的进程管理、问题排查、资源监控等运维操作 3. 使用shell 编写TCE、SCM、Docker 脚本,完成服务编译和部署

准备

  • 一台安装了linux 系统的物理机或者云主机,可运行shell脚本
  • 本地的vscode 安装Bash Debug 插件, 并升级bash到4.x以上
  • Npm全局安装zx依赖

Shell概念

  • Shell是操作系统最外的一层
  • 物理终端=>软件终端tty=>终端模拟器=>shell
  • Shell是Linux内核的一个外层保护工具,也是一个命令行解释器,负责将用户命令解析为操作系统所能理解的指令,实现用户与操作系统的交互。 image.png

发展

3个阶段

  • Ken Thonpson(来自贝尔实验室)在1971年为 UNIX开发了第 个shell,称为 V6 shell
  • Stephen Boume 在贝尔实验室 为 V UNIX 所开发的Bourne shell 即 sh
  • 开源组织GUN为了取代 Boume shell开发的Bourne-Again shell,即Bash

构成

  1. 命令行解释器
  2. 编程语言 image.png

3 语法和命令

变量

  • shell中的变量类型
  1. 自定义变量
  2. 环境变量
  3. 系统环境变量

区别——作用域

类型作用域
自定义变量当前shell
环境变量当前shell及其子shell
系统变量所有shell

区别

类型声明方式规范
自定义变量=字符串、整型、浮点型、日期型
环境变量export、declare -x
系统变量启动加载
  • 父子shell

    • 当父进程在第三方或核心工具时会启动子进程去执行,执行完后交还给父进程,父进程再继续执行下一条命令

自定义变量

#变量名=变量值(等号左右不能有空格)  
page_size=1  
page_num=2  
#将命令复制给变量  
_ls=ls  
#将命令结果赋值给变量  
file_list=$(ls -a)  
#默认字符串,不会进行 + 运算total=page_size*page_num X  (错误)

声明变量为整型

let total=page_size*page_num 
declare -i total=page_size*page_num 

导出环境变量

export total  
declare -x total
选项含义
-给变量设定类型属性
+取消变量的类型属性
-a将变量声明为数组类型
-i将变量声明为整数型
-x将变量声明为环境变量
-r将变量声明为只读变量
-p显示指定变量的被声明的类型

系统环境变量

  • $0:表示当前执行的脚本或命令的名称
  • $#:表示命令或脚本要处理的参数的个数
  • $*:把所有的参数看成以空格分隔的一个字符串整体(单字符串)返回
  • $?上条命令执行的状态码
  • $PS1命令提示符
  • $HOME用户主文件夹
  • $PATH全局命令的搜索路径

运算符和引用

类型: 1. 算数运算符 2. 逻辑运算符 3. 比较运算符 4. 引号 5. 圆括号 6. 命令连接 7. 后台运行

管道

  • Linux 管道使用竖线|连接多个命令,这被称为管道符。Linux 管道的具体语法格式如下: cmd1|cmd2

  • 要求:管道右侧的命令必须能接受标准输入才行,比如grep命令,ls,mv等不能直接使用,可以使用xargs预处理

重定向

  • 重定向可以让我们的程序的标准输出、错误输出的信息重定向文件里,那么这里还可以将文件的内容代替键盘作为一种标准输入的方式,在C语言的函数为:dup。

    • 输入重定向符号“<” ,“<<”
    • 输出重定向符号“>”,“>>”,“2>”,“&>”

判断命令

  • shell中提供了test、 [ 、[[ 三种判断符号,可用于:

    • 整数测试
    • 字符串测试
    • 文件测试
  • 语法

    • test condition
    • [condition]
    • [[condition]]
  • 注意

    • 中括号前后要有空格符;
    • [和test是命令,只能使用自己支持的标志位,<、>、=只能用来比较字符串
    • 中括号内的变量,最好都是用引号括起来 -[[更丰富, 在整型比较中支持<、>、=,在字符串比较中支持=~正则

4 总结

  • Shell编程是一种在Linux系统中常用的脚本语言,它可以通过编写一些简单的脚本来完成一些复杂的任务。
  • 复习复习,
  • 很开心自己的学习有所产出,以后复习时候也可以拿自己文章来复习,Shell脚本和编程以前学过但是很多细节都忘记了

参考