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

34 阅读2分钟

第二段...

执行过程和原理

执行

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

1 #! /bin/bash

1 #! /usr/bin/env bash

2.启动方式

1 # 文件名运行
2 #./filename.sh
3
4
5 # 解释器运行
6 bash ./filename.sh
7
8
9 # source 运行
10 source ./filename.sh

执行过程

1.字符解析

  • 识别换行符、分号(;)做行的分割
  • 识别命令连接符(|| && 管道)做命令的分割
  • 识别空格、tab符,做命令和参数的分割

2.shell 展开,例如,例如 {1..3} 解析为 1 2 3

3.重定向,将stdin、stdout、stderr的文件描述符进行指向变更

4.执行命令

  • builin 直接执行
  • 非 builtin 使用$PATH查找,然后启动子进程执行

5.收集状态并返回

shell展开

1.shell展开是指在命令行中使用通配符(wildcard)和变量引用(variable expansion)来扩展(expand)命令参数。通配符可以匹配多个文件名,而变量引用可以获取变量的值并将其插入命令中。

2.以下是shell展开的一些详细语法:

  •   * # 匹配任意数量的字符(包括0个)
      ? # 匹配一个任意字符
      [characters] # 匹配一个字符集中的任意一个字符
      {string1,string2,...} # 匹配多个字符串中的任意一个
    
  1. 变量展开
  •   $variable # 获取变量的值并将其插入命令中
      ${variable} # 同上,但是用花括号明确变量名的边界
      ${variable:-word} # 如果变量未定义或为空,则使用word作为默认值
      ${variable:=word} # 如果变量未定义或为空,则将word赋值给变量并使用它
      ${variable:?message} # 如果变量未定义或为空,则将message打印到标准错误输出并退出脚本或命令
    

调试和前端集成

使用set命令设置调试选项:

set命令可以设置多种调试选项,例如-x可以输出执行的每一条命令及其参数,-v可以输出脚本中每一行执行的命令。例如:

#!/bin/bash set -x echo "开始执行脚本..." # do something set +x echo "脚本执行完成。"

在执行该脚本时,终端会输出每一条执行的命令及其参数,方便我们查看脚本执行过程。

使用trap命令捕获错误信息:

trap命令可以捕获脚本执行时的错误信息,并进行相应的处理。例如:

#!/bin/bash trap 'echo "发生错误,程序退出!"' ERR # do something

当脚本执行过程中发生错误时,终端会输出错误信息,并执行trap命令中指定的操作。这样可以及时发现错误并进行处理。