配置文件加载
shell类型
-
登录shell
- 未登录shell
- 交互式
- 非交互式
source执行脚本
- 引号的作用不同需要注意
管道
管道与管道符|,作用是将前一个命令的结果传递给后面的命令 语法: cmd1 | cmd2
要求: 管道右侧的命令必须能接受标准输入才行,比如 grep 命令,ls、mv等不能直接使用,可以使用 xargs 预处理
注意: 管道命令仅仅处理 stdout,对于 stderr 会予以忽略,可以使用 set -o pipefail 设置 shell 遇到管道错误退出
输出重定向符号
- >:覆盖写入文件
- >>:追加写入文件
- 2>:错误输出写入文件
- &>:正确和错误输出统一写入到文件中 输入重定向符号
- <
- << 将接收到的一些信息 存入 <<前面指定的文件 ,当输入满足时返回值。并结束
判断命令 shell 中提供了 test、[、[[ 三种判断符号, 可用于:
- 整数测试
- 字符串测试
- 文件测试 [ "" ] 必须有空格符
分支语句
if -- if..else
循环
函数
注意
- shell自上而下执行,函数必须在使用前定义
- 函数获取变量和 shell script类似,1、$2获取
- 函数内 return 仅仅表示函数执行状态, 不代表函数执行结果
- 返回结果一般使用 echo、printf,在外面使用 $()、''获取结果
- 如果没有 return ,函数状态是上一条命令的执行状态,存储在 $?中
模块化
模块化的原理是在当前 shell 内执行函数文件
方式: source [函数库的路径]
常用命令
打印文件 | 在当前文件中查找 含有"ERROR"的行 | 分类 以空格分开 选取分开的第三个为排列条件
查看日志
查看当前日志的最后10行内容
tail -n 10 -f cloudfun.log -f 表示当读取到最后10行文件时不会结束命令,会等待输入
shell 执行的过程和原理
表明使用的是 哪个路径下的 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查找,然后启动子进程执行