[第3课-Shell脚本和编程|青训营笔记]

109 阅读2分钟

3-Shell脚本和编程

一、准备

  1. 安装linux物理机或云主机,可运行shell脚本
  2. 本地vscode安装Bash Debug插件。升级到4.x以上
  3. Npm全局安装zx依赖

二、知识

(一)Shell基础概念
  1. Shell

    1. 解释器:bash内置命令、GNU核心工具集、第三方库
    2. 编程语言:变量、运算、语句、函数
  2. 一些代码

    1. local 来定义变量:避免污染外部作用域
    2. unset:或者用unset来撤销变量,同上
    3. 模块化:source [函数库路径]
(二)执行过程和原理
  1. shell脚本一般以.sh结尾

  2. 第一行指定用什么命令解释器执行

    1. #! /bin/bash
    2. #! /usr/bin/env bash
  3. 启动方式
    1. 文件名运行:./filename.sh
    2. 解释器运行:bash ./filename.sh
    3. source 运行:source .filename.sh
  4. 执行过程
    1. 字符解析

      1. 识别换行符、分号做行的分割
      2. 识别命令连接符做命令的分割
      3. 识别空格、tab符,做命令和参数的分割
    2. shell展开

    3. 重定向

    4. 执行命令

    5. 收集结果返回

  5. shell展开
    1. 大括号展开:前缀、大括号、后缀

      1. a{b,c}d ——》abd,acd
      2. {1...5}——》1,2,3,4,5
      3. {1...5...2}——》1,3,5
      4. {a...e}——》a,b,c,d,e
    2. 波浪号展开

      1. 当前用户主目录:~ ——》$HOME
      2. 当前用户主目录:~/foo ——》$HOME/foo
      3. 指定用户主目录:~fred/foo——》用户fred的 $HOME/foo
      4. 当前工作目录:~+/foo——》 $PWD/foo
      5. 上一个工作目录:~ -/foo——》${SOLPWD-'~-'}/foo
    3. 参数展开

      1. 间接参数扩展:${!parameter}

      2. 参数长度:${#parameter}

      3. 空参数处理

        1. ${parameter:-word}:为空替换
        2. parameter:=word:为空替换,并将值赋给{parameter:=word}:为空替换,并将值赋给parameter变量
        3. ${parameter:?word}:为空报错
        4. ${parameter:+word}:不为空替换
      4. 参数切片

        1. ${parameter:offset}
        2. ${parameter:offset:length}
      5. 参数部分删除

        1. ${parameter%word} 最小限度从后面截取word
        2. ${parameter%%word} 最大限度从后面截取word
        3. ${parameter#word} 最小限度从前面截取word
        4. ${parameter##word} 最大限度从前面截取word、
        5. 2替换
      6. $()

      7. ``

    4. 数学计算:$(())

    5. 文件名展开:*?[...]外壳文件名模式匹配kopu754321`

(三)调试和前端集成
  1. 调试

    1. 普通log——打印相应结果

      1. echo
      2. print
    2. set

      1. -u 遇到不存在的变量会报错,停止执行
      2. -x 运行结果之前,先输出执行的那一行命令
      3. -e 只要发生错误,就终止执行
      4. -o pipefail 管道符链接的,只要一个子命令失败,整个关岛命令就失败,脚本就会终止执行
    3. vscode debug

      1. shellman:代码提示和自动不全

      2. shellcheck:代码语法校验

      3. shell-format:代码格式化

      4. Bash Debug:支持单步调试

        1. 安装vscode插件
        2. 编写lauch.json文件
        3. 升级bash到4.x以上版本
  2. 前端集成

    1. node中通过exec、spawn调用shell命令
    2. shell脚本中调用node命令
    3. 借助zx等库进行javascript、shell script的融合