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

88 阅读2分钟

Shell基础概念

Shell是一个命令解释器,它通过接受用户输入的Shell命令来启动、暂停、停止程序的运行或对计算机进行控制。 shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质

命令和语法

变量类型

运算符和引用

管道

将前一个命令的结果传递给后面的命令

语法:cmd1|cmd2

重定向

  • 输出重定向符号
    • >:覆盖写入文件
    • >>:追加写入文件
    • 2>:错误输出写入文件
    • &>:正确和错误输出统一写入到文件重
  • 输入重定向符号
    • <
    • <<

判断命令

  • shell中提供给了test,【,【【三种判断符号
  • 用于:
    • 整数测试
    • 字符串测试
    • 文件测试
  • 语法:
    • test condition
    • 【condition】
    • 【【condition】】

分支语句

循环语句:

函数:

  • funcName(){echo “abc”;}
  • function funcName(){echo“abc”}

模块化:

  • 模块化的原理是在当前shell内执行函数文件
  • 方式: source 【函数库的路径】

常用命令

执行过程和原理

  • 执行
    • shell脚本一般以.sh结尾,也可以没有,这是一个约定;第一行需要指定用什么命令解释器来执行
    • 启动方式

  • 执行过程
    • 字符解析
    • shell展开,例如{1..3}解析为1 2 3
    • 重定向,将stdin、stdout、stderr的文件描述符进行指向变更
    • 执行命令
      • builtin直接执行
      • 非builtin使用&path查找,然后启动子进程执行
    • 收集状态并返回
  • shell展开
    • 大括号展开{...}
    • 波浪号展开 ~
    • 参数展开
    • 命令替换
    • 数学计算 $((..))
    • 文件名展开 *?[..] 外壳文件名模式匹配

调式和前端集成

  • 调试
    • 普通log,使用echo、printf
    • 使用set命令
    • vscode debug插件
  • vscode配置
    • shellman:代码提示和自动补全
    • shellcheck:代码语法校验
    • shell-format:代码格式化
    • Bash Debug:支持单步调试
      • 安装vscode插件
      • 编写launch.json文件
      • 升级bash到4.x以上版本
  • 前端集成
    • node中通过exec、spawn调用shell命令
    • shell脚本中调通node命令
    • 借助zx等库进行javascript、shell script的融合