shell2|青训营笔记

98 阅读2分钟

执行过程和原理 shell脚本一般以 .sh结尾,也可以没有,这是一个约定 启动方式有文件名运行,解释器运行,source运行 ./filename.sh

bash ./filename.sh

source ./filename.sh

执行过程 1.字符解析,2.shell展开,3.重定向,4.执行命令,5.收集状态并返回

shell展开有 大括号展开:前缀、一对大括号、后缀(大括号内可以是逗号分隔的字符串序列 波浪号展开: ~当前用户主目录 ~fred/foo指定用户的主目录 ~-/foo上一个工作目录 参数展开: 间接参数扩展!parameter,其中引用的参数并不是parameter而是parameter的实际的值{!parameter},其中引用的参数并不是parameter而是parameter的实际的值 {} 参数长度{#parameter} {parameter:-word}#为空替换 {parameter:=word}#为空替换,并赋值给parameter变量 {parameter:?word}#为空报错 {parameter:+word}#不为空替换 参数切片 parameter:offset{parameter:offset} {parameter:offset:length} 参数部分删除 {parameter%word}#最小限度从后面截取word {parameter%%word}#最大限度从后面截取word {parameter#word}#最小限度从前面截取word {parameter##word}#最大限度从前面截取word

命令替换:(...)...数字计算:(...)或`...` 数字计算:((1+2)) 文件名展开:如果有单词没有被引号包裹,且其中出现了'','?',and'【'字符,则shell会去按照正则匹配的方式查找文件名进行替换,如果没找到则保持不变 例:$ echo D

调试: 1.使用log,echo、printf 2.使用set命令 3.vscode debug插件

前端集成:node中通过exec、spawn调用shell命令 shell脚本中使用node命令

借助zx等库进行JavaScript、shell、script的融合 借助shell完成系统操作,文件io、内存、磁盘系统状态查看 借助nodejs完成应用层能力、网络io、计算等

exec启动一个子shell进程执行传入的命令,并且将执行结果保存在缓冲区中,并且缓冲区是有大小限制的,执行完毕通过毁掉函数返回

spawn默认不使用shell,而是直接启动子进程执行命令,且会直接返回一个流对象,支持写入或者读取数据,这个在大数据量交互的场景比较适合