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

99 阅读2分钟
Shell脚本和编程 | 青训营笔记
Shell基础概念
语法和命令

1)变量

类型作用域声明方式规范
自定义变量当前shell=字符串、整型、浮点型、日期型
环境变量当前shell及其子shellexport、declare -x
系统环境变量所有shell启动加载

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

语法: cmd1 | cmd2

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

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

3)重定向

1、输出重定向符号:

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

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

  • 整数测试
  • 字符串测试
  • 文件测试

语法:

  • test condition
  • [ condition ]
  • [[ condition ]]

注意:

  • 中括号前后要有空格符

  • [ 和 test 是命令,只能使用自己支持的标志位, < > = 只能用来比较字符串

  • 中括号内的变量,最好都是用引号括起来

  • [[ 更丰富,在整形比较中支持< > = ,在字符串比较中支持= ~ 正则

    循环

// while 循环
while condition; do 程序段; done
// until 循环
until condition; do 程序段; done
// for循环
for var in [words...]; do 程序段; done

函数

// 语法一
funcName(){ echo "abc" }
// 语法二
function funcName(){ echo "abc" }

注意:

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

4)模块化:模块化的原理实在当前 shell 内执行函数文件

执行过程和原理

1、shell 脚本一般以.sh结尾,也可以没有,这是一个约定

2、启动方式

# 文件名运行
./filename.sh
# 解释器运行
bash ./filename.sh

3、执行过程

1)字符解析

  • 识别换行符、分号;做行的分割
  • 识别命令连接符做命令的分割
  • 识别空格、tab符做命令和参数的分割

2) shell展开

3) 重定向,将stdin、stdout、stderr的文件描述符进行只想更正

4)执行命令

4、shell展开

1)大括号展开

2)参数展开

3)命令替换

4)数学计算

5)文件名展开

调试和前端项目集成

1)普通log,使用echo、printf

2)使用set命令

3)vscode debug插件

vscode配置

1、shellman:代码提示和自动补全

2、shellcheck:代码语法校验

3、shell-format:代码格式化

4、bash debug:支持单步调试