一、课程内容
1. shell语法和命令
(1) 变量
- 自定义变量:仅当前shell[=]{let、delare -i}
- 环境变量:当前shell以及其子shell[declare -x,export]
- 系统环境变量:所有shell[启动加载]{#(传入参数数量)、@(传入脚本的所有参数)、HOME(主文件夹)、$PATH(全局命令的搜索路径)
配置文件加载
- login shell :login shell --> /etc/profile --> one of
~/bash_profile | ~/bash_login | ~/.profile --> ~/bashrc --> finish
- non-login shell :~/bashrc --> /etc/bashrc
运算符
引号
- 单引号 ' ' :完全引用、原样输出
- 双引号 " " :部分引用
- 反引号
: 执行命令
圆括号
- () :执行命令
- (()) :算数运算
分号 ;:(cmd1;cmd2) cmd1,cmd2串行执行
管道和重定向
- 管道语法:cmd1 | cmd2
- 重定向:(输出重定向)cmd1 > filename[覆盖]; cmd1 >> filename[追加];(输入重定向) cmd1 < filename[覆盖];cmd 1 << filename[追加]
判断命令
用于整数测试、字符串测试、文件测试
- test
- []
- [[]]
分支语句
- if elif else fi
- case $num in "num值1");;"num值2");;...);;esac[)表示兜底]
循环语句
- while : [while condition; do ... done]
- until : [until condition; do ... done]
- for : [for var in [...]; do ... done]
函数
语法:
- function name(){}
- function name{}
- name(){}
注意:
- shell自上而下进行,函数必须在使用前定义
- 函数获取参数方式:n
- return 仅仅表示状态,不是函数执行结果
- 返回结果用:echo、printf打印
- $?:查询上一条函数的执行状态
模块化
语法: source [函数路径]
shell执行过程和原理
-
执行过程
shell脚本 --> bash解释器{字符解析(行分割、命令分割、参数分割) --> shell展开 --> 重定向 --> 执行命令 --> 收集状态并返回}
-
shell展开
- 大括号展开 :前缀、{}、后缀[a{b,c}d => abd acd、{1..3} => 1 2 3]
- 波浪号展开 :[~ => HOME/foo]
- 参数展开(!parameter)]、参数长度[#parameter]、空参数处理[{parameter%word}]
- 命令替换
- 数学计算
- 文件名展开[正则表达式]
调试和前端集成
1. 调试
-
普通log,使用echo、printf
-
使用set命令[-u -x -i -o]
-
vscode debug插件