学习Shell的价值
- Linux服务器的基本操作和管理
- 前端Node.js服务的进程管理、问题排查、资源监控等运维操作
- 使用Shell编写TCE、SCM、Docker脚本,完成服务编译和部署
Shell基础概念
终端:获取用户输入、展示运算结果的硬件设备
tty:teletypeWriter的简称,和终端等价, 早期指电传打印机,在linux 中是输入/输出环境
终端模拟器:Mac Terminal、 iTerm2等, 关联虚拟tty的输入输出软件
Shell:command interpreter,处理来自终端模拟器的输入,解释执行之后输出结果给终端
Bash:shell的一种具体实现
发展
构成
语法和命令
变量
自定义变量
系统环境变量
配置文件加载
运算符和引用
管道
管道与管道符|,作用是将前一个命令的结果传递给后面的命令
语法: cmd1| cmd2
要求:管道右侧的命令 必须能接受标准输入行,比如grep命令,Is、 mv等不能直接使用,可以使用xargs预处理
注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可以使用set -o pipefail设置shell遇到管道错误退出
重定向
判断命令
分支语句
循环
函数
语法一:
funcName(){echo "abc";}
语法二:
function funcName(){echo "abc";}
注意:
- she11自上而下执行,函数必须在使用前定义
- 函数获取变量和shell script类似,1、$2 ...获取
- 函数内return仅仅表示函数执行状态,不代表函数执行结果
- 返回结果一般使用echo、printf,在外面使用$()、`` 获取结果
- 如果没有return ,函数状态是上一条命令的执行状态, 存储在$?中
模块化
常用命令
执行过程和原理
执行
执行过程
Shell展开
- 大括号展开(Brace Expansion) {...}
- 波浪号展开(Tilde Expansion) ~
- 参数展开(Shell Parameter Expansion)
- 命令替换(Command Substitution)
- 数学计算(Arithmetic Expansion) $((..))
- 文件名展开(Filename Expansion) * ? [..]外壳文件名模式匹配
大括号展开
波浪号展开
参数展开
命令替换
数学计算
文件名展开
调试和前端集成
调试
- 普通log,使用echo、printf
- 使用set命令
- vscode debug插件