Day3

101 阅读2分钟

image.png

配置文件加载

shell类型

  • 登录shell

  • 未登录shell
    • 交互式
    • 非交互式 source 执行脚本

image.png

  • 引号的作用不同需要注意

管道

管道与管道符|,作用是将前一个命令的结果传递给后面的命令 语法: cmd1 | cmd2

要求: 管道右侧的命令必须能接受标准输入才行,比如 grep 命令,ls、mv等不能直接使用,可以使用 xargs 预处理

注意: 管道命令仅仅处理 stdout,对于 stderr 会予以忽略,可以使用 set -o pipefail 设置 shell 遇到管道错误退出

image.png 输出重定向符号

  • >:覆盖写入文件
  • >>:追加写入文件
  • 2>:错误输出写入文件
  • &>:正确和错误输出统一写入到文件中 输入重定向符号
  • <
  • << 将接收到的一些信息 存入 <<前面指定的文件 ,当输入满足时返回值。并结束

判断命令 shell 中提供了 test、[、[[ 三种判断符号, 可用于:

  • 整数测试
  • 字符串测试
  • 文件测试 [ "" ] 必须有空格符

image.png

分支语句

if -- if..else

循环

image.png

函数

image.png

注意

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

模块化

模块化的原理是在当前 shell 内执行函数文件

方式: source [函数库的路径]

image.png

常用命令

image.png 打印文件 | 在当前文件中查找 含有"ERROR"的行 | 分类 以空格分开 选取分开的第三个为排列条件

查看日志

image.png

查看当前日志的最后10行内容

tail -n 10 -f cloudfun.log -f 表示当读取到最后10行文件时不会结束命令,会等待输入

shell 执行的过程和原理

image.png 表明使用的是 哪个路径下的 bash

启动方式

./filename.sh 文件名运行

解释器运行 bash ./filename.sh

source ./filename source 运行

执行过程

1. 字符解析

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

2.shell 展开

  • 例如{1..3) 解析为 1 2 3

3.重定向

  • 将stdin、stdout、stderr的文件描述符进行指向变更

4.执行命令

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

5.收集状态并返回

image.png

参数展开

image.png

image.png

文件名展开