青训营笔记

53 阅读2分钟

青训营笔记

Shell 脚本和编程

课程介绍

Shell是一种命令行界面,也是一种编程语言,熟练掌握Shell能够大大提升Unix/Linux环境下的工作效率。本课程将从其发展历史、基础语法开始,通过示例逐步深入,不仅帮助大家学会使用Shell,也在一定程度上去理解Shell的执行原理和语法设计。

课程重点

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

Shell基础概念

  1. 终端:获取用户输入,展示运算结果的硬件设备
  2. tty:teletypeWriter的简称,和终端等价
  3. 终端模拟器:Mac Terminal、iTerm2等,关联虚拟tty的输入输入软件
  4. Shell:command interpreter,处理来自终端模拟器的输入,解释执行之后输出结果给后端
  5. Bash:shell的一种具体实现

语法和命令

  • 自定义变量
  • 环境变量
  • 系统环境变量

image.png

image.png

自定义变量

image.png

系统环境变量

image.png

配置文件加载

image.png

运算符和引用

image.png

管道

  • 管道与管道符|,作用是将前一个命令的结果传递给后面的命令
  • 语法:管道右侧的命令必须能接受标准输入才行,比如grep命令,is、mv等不能直接使用,可以使用xargs预处理
  • 注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可以使用set-o pipefail设置shell遇到管道错误退出

image.png

重定向

输出定向符号

  • :覆盖写入文件

  • :追加写入文件

  • 2>:错误输出写入文件、
  • &>:正确和错误同意写入到文件中

输入重定向符号

  • <
  • <<

image.png

判断命令

shell中提供了test、[ / [[ 三种判断符号

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

语法

  • test condition
  • [condition]
  • [[condition]]

注意

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

image.png

分子语句

image.png

循环

  • while循环:while condition:do程序段;done
  • until循环:until condition;do程序段;done
  • for循环:for var in [words...];do程序段;done

函数

  • 语法一:funcName(){echo“abc”;}
  • 语法二:function funcName(){echo“abc”;}

注意

  • shell自上而下执行,函数必须在使用前定义
  • 函数获取变量和shell scrip类似,()代表函数名,后续参数通过()代表函数名,后续参数通过1、$2...获取
  • 函数内return仅仅表示函数执行状态,不代表函数执行结果
  • 返回结果一般使用echo、printf,在外面使用$()、"获取结果
  • 如果没有return,函数状态是上一条命令的执行状态,存储在$?中

模块化

image.png

image.png

执行过程和原理

image.png

image.png

image.png

调试和前端集成

image.png

image.png

image.png