Shell基础概念
概念
发展
- Ken Thompson(来自贝尔实验室)在1971年为UNIX开发了第一个shell,称为V6 shell
- Stephen Bourne 在贝尔实验室为V7 UNIX所开发的Bourne shell,即sh
- 开源组织GNU为了取代Bourne shell开发的Bourne-Again shell,即Bash
构成
命令和语法
- 变量
- 自定义变量
- 系统环境变量
- 配置文件和加载 source ~/.bashrc
运算符和引用
管道
- 管道与管道符|,作用是将前一个命令的结果传递给后面的命令
- 语法:cmd1|cmd2
- 要求:管道右侧的命令必须能接受标准输入才行,比如grep命令,Is、mv等不能直接使用,可以使用xargs预处理
- 注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可以使用set-o piprfail 设置管道预处理退出
重定向
- 输出重定向符号
-
:覆盖写入文件
-
:追加写入文件
- 2>:错误输出写入文件
- &>:正确和错误输出统一写入到文件中
- 输入重定向符号
- <
- <<
判断命令
- 语法:
- test condition
- [condition]
- [[condition]]
分支语法
- if condition;then
程序段 elif condition;then 程序段 else 程序段 fi
- case$变量in:
“第一个变量内容”) 程序段 ;; “第一个变量内容”) 程序段 ;; *) 程序段 ;; esac
循环
- while循环
- until循环
- for循环
函数
- funcName(){echo“abc”;}
- function funcName(){echo "abc";}
- 注意:
模块化
模块化的原理是在当前shell内执行函数文件,方式:source[函数库的路径]
常用命令
执行过程和原理
执行
- shell脚本一般以.sh结尾,也可以没有,这是一个约定;第一行需要指定用什么命令解释器来执行
- 启动方式
执行过程
- 字符解析
- shell展开
- 重定向
- 执行命令
- 收集状态并返回
shell展开
调试和前端集成
调试
- 普通log,使用echo、printf
- 使用set命令
- vscode debug插件