本文同步发布于博客(xblc.netlify.app),如果有更新博客会在第一时间更新
Shell 基础概念
概念
- 终端 (Terminal):计算机硬件的末端,和用户交互的设备(键盘和屏幕)
a piece of equipment consisting of a keyboard and a screen that is used for putting information into a computer or getting information from it.
- tty (teletypeWriter):和终端差不多,Linux 引申为实际的输入设备
- 终端模拟器:就是在实际电脑中模拟终端进行输入的软件,会关联到虚拟tty
- Shell:一种编程语言,模拟器输入命令的解释器,解释输出对象就是实际的终端
- Bash:GNU 为 Shell 在 Linux 中开发的分支
Shell 发展分支的关系
构成
语法
变量
- 子Shell 不能使用 父Shell 的自定义变量,但是可以用父Shell的环境变量
-
等号两边不能有空格
-
等号右边不加
$的符号默认为字符串 -
用 let 声明一个变量的时候等号右边则会优先不按字符串来处理
-
declare也是用于声明变量,可以精细化控制声明变量的类型、权限、作用域。+可以取消变量类型-x可以更改为环境变量-p用于显示类型
系统环境变量
配置文件加载
source用于执行脚本或者从脚本中加载变量到当前 shell
- 登录式
- 非登录
- 交互式(模拟器
- 非交互式(文件
运算符和引用
- 后置
&符号可以代替--deamon - 继续前置
nohup命令可以取消和 shell 一起关闭
管道
- 一些不能接受标准输入的命令可以使用
xargs命令来预处理,它的作用是接受标准输入并转换成参数列表,也就ls原来的输入 - 默认仅处理 stdout,stderr 则须从手动设置命令参数
重定向
-
后置的重定向参数
-
单独获取一列的输出信息:循环获取每一行,echo,cut
-
输入重定向的一个例子:把
语句和其他语法
- 判断命令
- 用于测试
- 双方括号是更高级的判断
- 分支语句
- 循环
- 函数
return仅用来表示状态,结果一般用\``来取local和unset可以用来避免作用域污染
- 模块化
常用命令
- 用于问题排查
一些使用案例
- 用
grep来获取日志中的ERROR - 还可以进一步按照不同列的内容进行排序
-t分割-k选择列 - 可以进一步用
-A-B来看附近的内容(after和before) tail -f可以用来动态接受输入
Shell 原理
概述
执行
- 文件
- 后缀是约定
- 第一行是解释器的约定
- 启动方式
执行过程
- 字符解析 2. 行分割 3. 命令分割 4. 参数分割
- shell 展开
- 重定向
- 执行 8. buildin 9. path
- 收集执行状态返回给用户脚本
Shell 展开
- 大括号展开生成一些序列相关值
- ~可以直接展开用户
- 参数展开
- 间接双层参数展开
- 参数长度
- 空参数处理:变量为空的操作
- 参数切片
- 参数删除:一种截取字符串的方法
- 命令替换:输出命令结果
- 数学计算 两个圆括号
- 文件名模式匹配,部分正则
调试和前端集成
命令调试
三种方式
- echo printf
- set 配置
- 插件