shell基础知识笔记|青训营笔记

85 阅读3分钟

shell的基础概念 概念

IMG_20230416_164240.jpg 终端:获取用户输入,展示运算结果的硬件设备 终端模拟器:Mac Terminal,iTerm2等,关联虚拟tty的输入输出软件 tty:和终端等价,早期指电传打印机,在Linux中是输入和输出环境。 shell:处理来自终端模拟器的输入,解释执行之后输出结果始终端 Bash:shell的一种具体实现 发展

IMG_20230416_164827.jpg 构成 IMG_20230416_164915.jpg 解释器来解析我们写的脚本和命令 编程语言 类似于c语言

命令和语法 自定义变量 默认字符型可以是其他类型但需要声明 这点和Python一样

IMG_20230416_165945.jpg 区别c语言等号左右两边不能有空格 默认字符不会进行+运算 区别Python 使用export 或者 declare 导出环境变量

2.环境变量声明方式为export declare 作用域为shell以及其子shell 3.系统环境变量 声明方式为启动加载 作用域为所有的shell path是查找命令的路径会从左往右的进行搜索 怎样修改默认值 配置文件的加载过程 shell的两种类型 Login shell(登录式)和non-Loginshell(非登录式) 交互式与非交互式的shell区别在于等待输入和不等待输入

IMG_20230416_171241.jpg 运算符和引用 双引号部分引用 单引号完全引用 反引号执行一段命令并拿出来

其他与c语言无区别

4.父进程是当前执行的进程 被父进程触发的叫子进程,子进程执行完之后再交给父进程,父进程再执行下一条命令。 执行过程和原理 shell管道 shell前一个的输出会作为后一个管道的输入 IMG_20230416_171457.jpg 要求:管道右侧的命令必须接受标准输入才行,比如grep,ls,mv等不能直接使用,可以使用xrags预处理

IMG_20230416_171831.jpg 要求:管道中如果错误 是不会退出和报错的 即管道命令只处理stdout ,对于stderr会予以忽略,可以使用set-o piperfall设置shell遇到的管道错误。 重定向

IMG_20230416_172206.jpg 可以改变默认的输出 分为输入重定向和输出重定向 2>指的是fd2标准错误 &>指的是标准错误和正确输出写到同一个文件 < shell中的判断命令

IMG_20230416_190437.jpg 语法: test condition [condition] [[condition]] 注意 中括号前后要有空格符 []和test是命令,只能使用自己支持的标志位,<,>,=只能用来比较字符串 中括号内的变量,最好都是用引号引起来 [[更丰富,在整形比较中支持>,<,在字符串比较中支持=~正则 分支语句 区别c语言和Python中的分支语言 标点 字符 结尾

qq_pic_merged_1681719917598.jpg 循环

qq_pic_merged_1681719997292.jpg 和上面同理 函数 参数是跟在函数名后面 用空格空开 shell自上而下而执行,函数必须在使用前定义 函数获取变量和shell script类似,0代表函数名,后续参数通过0代表函数名,后续参数通过1,2等等获取函数内return仅仅表示函数执行状态,不代表函数执行结果返回结果一般用echoprintf,外面使用2等等获取 函数内return 仅仅表示函数执行状态,不代表函数执行结果 返回结果一般用 echo,printf,外面使用(),"获取结果 如果没有return ,函数状态是上一条命令的执行状态,存储在$?中

IMG_20230416_195404.jpg 常用命令 在日志排查时常常用到 grep a3 b3 上下文前三个部分和后三个部分 tail 结尾 header排查时也常用 shell脚本一般以.sh结尾,也可以没有,这是一个约定;第一行需要指定要用什么命令来执行

执行过程 一、字符解析 识别换行符,分号;做行的分割 识别命令连接符做命令的分割 识别空格,tab符,做命令和参数的分割 shell展开 重定向 执行命令 shell展开 大括号展开

IMG_20230416_200738.jpg 波浪号展开

IMG_20230416_200812.jpg 参数展开

IMG_20230416_203407.jpg

IMG_20230416_204052.jpg

数字展开 文件名展开 调试和集成 调试 普通log,使用echo,printf 使用set命令 vscode debug插件

IMG_20230416_204559.jpg

IMG_20230416_204623.jpg

vscode进行调试

前端集成

IMG_20230416_205325.jpg exec,spawn去调用ls等命令 shell脚本中调用node命令 缓冲区200kb内存 spawn对返回没有大小限制 使用zx要先安装