Shell脚本和编程
1:基础概念 2:命令和语法 3:执行过程和原理 4:调试和前端集成
价值:
Linux服务器的基本操作和管理;
前端node.js服务的进程管理,问题排查,资源监控等运维操作
使用shell编写TCE,SCM,Docker脚本,完成服务编译和部署
课程准备:linux的物理机或云主机,可以运行shell脚本
本地的vscode安装bash debug插件,升级到4.x以上
Npm全局安装zx依赖
1:基础概念
终端:获取用户输入,展示运算结果的硬件设备
终端模拟器:关联虚拟tty的输入输出软件
Tty:和终端等价,早期指电传印机,在linux中是输入/输出环境teletypewriter
Shell:处理来自终端模拟器的输入,解释执行后输出结果始终端
Bash:shell的一种具体实现
2:语法和命令
| 类型 | 作用域 | 声明方式 | 规范 |
|---|---|---|---|
| 自定义变量 | 当前shell | = | 字符串,整形,浮点型,日期型 |
| 环境变量 | 当前shell及其子shell | Export declare -x | |
| 系统环境变量 | 所以shell | 启动加载 |
父子shell:
当前(父进程)————————>下一条命令
|————>子进程——|》
变量名=变量名,等号左右无空格 page_size=1 page_num=2
讲明了赋值给变量 _ls=ls
将结果赋值给变量 file_list=S(ls -a)
默认字符串不会进行+运算 total=page_size*page_num 错的
声明变量为整形 let total=page_sizepage_num declare -I total=page_sizepage_num
导出环境变量 export total declare -x total
系统环境变量
???(实在看不懂)
运算符和引用
重定向:
输出重定向符号:< >>
:覆盖写入文件
:追加写入文件
2>:错误输出写入文件
&>正确和错误输出统一写入到文件
判断命令:
整数测试
字符串测试
文件测试
语法:
Test condition
[condition]
[[condition]]
中括号前后要有空格符
[和test是命令,只能用自己支持的标志位,< > =只能用来比较字符串
中括号内的变量最好都是用引号括起来
[[更丰富,在整形比较中支持< > =在字符串中比较支持=~正则
函数:
语法: funcName(){echo “abc”;}
function funName(){echo”abc”;}
模块化:
Source[函数库的路径]
常用命令:
3 执行:
1:shell脚本一般以.sh结尾,可有可无
2:启动方式:
执行过程:
字符解析
识别换行符,分号做行的分割,识别连接符,空格,tab符做命令的分割
Shell的展开 重定向,将stdin stdout stderr的文件描述符进行指向变更
执行命令:builtin直接执行,非builtin使用PATH查找,然后启动子程序执行
Shell展开:
大括号展开:前缀,一对大括号,后缀
波浪号展开
参数展开
参数展开有五种,详见图片
文件名展开,
4 调试: