shell的基础概念 概念
终端:获取用户输入,展示运算结果的硬件设备
终端模拟器:Mac Terminal,iTerm2等,关联虚拟tty的输入输出软件
tty:和终端等价,早期指电传打印机,在Linux中是输入和输出环境。
shell:处理来自终端模拟器的输入,解释执行之后输出结果始终端
Bash:shell的一种具体实现
发展
构成
解释器来解析我们写的脚本和命令
编程语言 类似于c语言
命令和语法 自定义变量 默认字符型可以是其他类型但需要声明 这点和Python一样
区别c语言等号左右两边不能有空格
默认字符不会进行+运算 区别Python
使用export 或者 declare 导出环境变量
2.环境变量声明方式为export declare 作用域为shell以及其子shell 3.系统环境变量 声明方式为启动加载 作用域为所有的shell path是查找命令的路径会从左往右的进行搜索 怎样修改默认值 配置文件的加载过程 shell的两种类型 Login shell(登录式)和non-Loginshell(非登录式) 交互式与非交互式的shell区别在于等待输入和不等待输入
运算符和引用
双引号部分引用
单引号完全引用
反引号执行一段命令并拿出来
其他与c语言无区别
4.父进程是当前执行的进程 被父进程触发的叫子进程,子进程执行完之后再交给父进程,父进程再执行下一条命令。
执行过程和原理
shell管道
shell前一个的输出会作为后一个管道的输入
要求:管道右侧的命令必须接受标准输入才行,比如grep,ls,mv等不能直接使用,可以使用xrags预处理
要求:管道中如果错误 是不会退出和报错的
即管道命令只处理stdout ,对于stderr会予以忽略,可以使用set-o piperfall设置shell遇到的管道错误。
重定向
可以改变默认的输出
分为输入重定向和输出重定向
2>指的是fd2标准错误
&>指的是标准错误和正确输出写到同一个文件
<
shell中的判断命令
语法:
test condition
[condition]
[[condition]]
注意
中括号前后要有空格符
[]和test是命令,只能使用自己支持的标志位,<,>,=只能用来比较字符串
中括号内的变量,最好都是用引号引起来
[[更丰富,在整形比较中支持>,<,在字符串比较中支持=~正则
分支语句
区别c语言和Python中的分支语言
标点 字符 结尾
循环
和上面同理
函数
参数是跟在函数名后面 用空格空开
shell自上而下而执行,函数必须在使用前定义
函数获取变量和shell script类似,1,(),"获取结果
如果没有return ,函数状态是上一条命令的执行状态,存储在$?中
常用命令
在日志排查时常常用到
grep a3 b3 上下文前三个部分和后三个部分
tail 结尾
header排查时也常用
shell脚本一般以.sh结尾,也可以没有,这是一个约定;第一行需要指定要用什么命令来执行
执行过程 一、字符解析 识别换行符,分号;做行的分割 识别命令连接符做命令的分割 识别空格,tab符,做命令和参数的分割 shell展开 重定向 执行命令 shell展开 大括号展开
波浪号展开
参数展开
数字展开 文件名展开 调试和集成 调试 普通log,使用echo,printf 使用set命令 vscode debug插件
vscode进行调试
前端集成
exec,spawn去调用ls等命令
shell脚本中调用node命令
缓冲区200kb内存
spawn对返回没有大小限制
使用zx要先安装