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

46 阅读2分钟

Shell基础概念

概念

  • 终端:获取用户输入、展示运算结果的硬件设备
  • tty(teletypewriter):输入输出环境,和终端等价
  • 终端模拟器:Terminal,关联虚拟tty的输入输出软件
  • Shell:处理来自终端模拟器的输入,解释之后输出结果给终端
  • Bash:Shell的一种具体实现

构成

image.png

语法和命令

image.png

image.png

image.png

配置文件加载

image.png

  • 登录式
  • 非登录式
    • 交互式:等待用户输入指令
    • 非交互式:直接执行

运算符和引用

image.png

管道

“|”,将前一个命令的结果传递给后面一个命令

重定向

image.png 本来fd0指向终端输入,fd1、fd2指向终端输出,现在通过重定向符号操作使它们指向了不同其他的文件。

  • ‘>’:覆盖写入文件
  • ‘>>’:追加写入文件
  • ‘2>’:错误输出写入文件
  • ‘&>’:正确和错误输出统一写入到文件中

判断命令

image.png

常用命令

image.png

执行过程和原理

创建Shell脚本

#! /bin/bash

#! /usr/bin/env bash

启动方式

文件名运行:./filename.sh

解释器运行:bash ./filename.sh

source运行: source ./filename.sh

执行过程

image.png

  1. 绿色部分为Shell脚本,启动之后交给bash解释器执行。
  2. 蓝色部分为bash解释器内部阶段,首先是字符解析,识别脚本的换行符、分号做基本的行的分割,然后识别命令连接符(& || 管道)做命令的分割,最后识别空格、tab做命令和参数的分割。
  3. Shell展开
    • {}展开:可以是逗号分隔的字符串序列和序列表达式

      image.png

    • ~展开

      image.png

    • 参数展开

      image.png

    • 命令替换 $(...)/'...':在子进程中执行命令并用得到的结果替换包裹的内容

      image.png

    • 数学计算 $((...))

      image.png

    • 文件名展开 *?[..]

      image.png

  4. 重定向
  5. 执行命令
    • 内置命令直接执行
    • 非内置命令用$PATH查找,然后启动子进程执行
  6. 收集状态并返回给用户脚本

调试Shell脚本和前端集成

  • echo、printf来打印

  • set命令

    image.png

  • vscode debug插件