课程介绍
这节课我们学习shell基础和语法,shell执行过程和原理,shell调试和前端集成。
学习shell 的价值:
- Linux 服务器的基本操作和管理
- 前端Node.js服务的进程管理、问题排查、资源监控等运维操作
- 使用shell 编写TCE、SCM、Docker 脚本,完成服务编译和部署
Shell基础概念
概念
-
命令(Command):Shell通过输入命令来执行不同的操作或任务,例如创建文件、复制文件、移动文件、运行程序等。命令通常由命令名和参数组成,命令名指定要执行的操作,参数用于指定命令的具体操作方式或作用对象。
-
提示符(Prompt):Shell在等待用户输入命令时会显示一个提示符,通常是一个特殊的字符或字符串,表示Shell已经准备好接受命令输入。
-
文件系统(File System):Shell可以用于管理计算机上的文件和目录,包括创建、复制、移动、删除、重命名、查看等操作。Shell使用文件系统的路径来定位文件和目录,例如绝对路径(从根目录开始的完整路径)和相对路径(从当前目录开始的相对路径)。
-
管道(Pipeline):Shell允许将多个命令通过管道连接起来,其中一个命令的输出作为另一个命令的输入。这样可以实现多个命令的组合和协作,从而更加灵活地完成复杂的任务。
-
环境变量(Environment Variable):Shell使用环境变量来存储系统级别的配置信息、用户配置和运行时参数。环境变量可以在命令中使用,并且可以通过设置和修改来影响Shell的行为和操作。
-
脚本(Script):Shell允许用户编写一系列命令的脚本文件,以便将一组命令作为一个单独的程序运行。脚本可以包含条件语句、循环、函数等控制结构,从而实现更加复杂的自动化任务。
-
快捷键(Shortcut):Shell提供了许多快捷键和命令行编辑功能,用于提高命令行操作的效率和便捷性。例如,可以使用上下箭头键来浏览历史命令,使用Tab键进行命令和文件名的自动补全,使用Ctrl+C来中断正在执行的命令等。
常见的 Shell 命令
- cd:改变当前工作目录。
- pwd:显示当前所在的工作目录的路径。
- ls:显示当前目录中的文件和目录。
- cp:复制文件或目录。
- mv:移动或重命名文件或目录。
- rm:删除文件或目录。
- mkdir:创建一个新的目录。
- rmdir:删除一个空的目录。
- touch:创建一个新文件或更新一个已有文件的时间戳。
- cat:连接文件并打印到标准输出。
- echo:打印字符串或变量的值到标准输出。
- ps:列出当前运行的进程。
- kill:发送信号给进程,关闭它或者操作它。
- top:监视系统资源和进程。
- ping:测试网络连接。
- curl:从 URL 下载数据。
- ssh:通过 SSH 协议远程登录到另一台计算机系统。
- grep:在文件中搜索匹配的文本。
运算符和引用
执行过程
- 字符解析
- shell 展开
- 重定向
- 执行命令
- 收集状态并返回
shell展开
- 大括号展开(Brase Expansion) {..}
一般由三部分构成:前缀,大括号,后缀 大括号展开是一种可以生成任意字符串的机制。展开大括号的模式采用可选的前缀,后接一系列逗号分隔的字符串或一对大括号之间的序列表达式,后接可选的后缀。前缀与大括号中包含的每个字符串组合,然后将后缀附加到每个结果字符串,从左到右展开。
- 波浪号展开(Tilde Expansion) ~
如果一个单词以未加引号的斜杠字符(’ ~ ')开头,则第一个未加引号的斜杠之前的所有字符(如果没有加引号的斜杠,则所有字符)都被视为波浪前缀。如果波浪号前缀中的字符都没有被引用,那么波浪号后面的波浪号前缀中的字符将被视为可能的登录名。如果这个登录名是空字符串,则用shell变量HOME的值替换波浪号。如果没有设置HOME,则替换执行shell的用户的HOME目录。否则,波浪前缀将被替换为与指定登录名关联的主目录。
- 参数展开
- 间接参数扩展${!parameter}
- 参数长度${#parameter}
- 空参数处理:parameter:−word为空替换;{parameter:-word}为空替换;parameter:−word为空替换;{parameter:=word}为空替换,并赋值给parameter变量;parameter变量;parameter变量;{parameter:?word}为空报错;${parameter:+word}不为空替换。
- 参数切片
- 参数部分删除
- 命令替换
命令替换允许命令的输出替换命令本身。
- $(...)
- ...
- 数学计算(Arithmetic Expansion) $((..))
使用$(())包裹数学运算表达式,得到结果并替换。
- 文件名展开(Filename Expansion) ?[..]外壳文件名模式匹配 当单词没有被引号包裹,且出现' ' '?' '['字符,shell会按照正确的方式查找文件名替换,如果没找到保持不变。
VSCode配置
插件
- shellman:代码提示和自动补全
- shellcheck:代码语法校验
- shell-format:代码格式化
- Bash Debug:支持单步调试
前端集成
- node中通过exex ,spawn 调用shell命令
- shell脚本中调用node命令
- 借助zx等库进行javascript,shell script的融合