本次是本期训练营第3天的笔记内容,主要学习shell脚本相关的知识。Shell是Linux服务器的基本操作和管理,在前端Node.js服务中可以完成运维操作,也可以用来编写TCE、SCM、Docker脚本,完成服务编译和部署。
Shell 基本概念
shell的组成框架如图所示,主要分为解释器和编程语言对应的语法等内容。Shell是一种命令行解释器,是用户与操作系统内核交互的一种接口。它提供了一个解释器环境,用于在命令行上执行各种命令和程序。
在Unix、Linux等操作系统中,常见的Shell有Bourne shell(/bin/sh)、Bash shell(/bin/bash)、C shell(/bin/csh)和Korn shell(/bin/ksh)等。
Shell可以用于管理文件和目录,执行程序和脚本,操作系统和进程等。用户可以通过键入命令或脚本来与Shell进行交互,Shell会将命令或脚本解释执行,并返回结果。
Shell还支持重定向、管道、环境变量等功能,使得用户可以更加灵活地使用命令行界面来管理系统。Shell还支持各种编程语言,如Perl、Python等,使得用户可以使用脚本编写更加复杂的操作和自动化任务。
命令和语法
在shell编程中,主要包括以下内容:变量、环境变量、配置文件、运算符和引用、管道、重定向、判断和循环、模块化等。
具体的命令和语法在此不多赘述,可以网上搜索相关教程或是查看官网文档。
执行过程和原理
shell脚本的执行过程如下:
- shell脚本其实就是一个纯文本文件,里面包含了shell命令和语句。用户执行这个脚本文件,比如通过在命令行输入文件名并回车来执行。
- shell程序(比如bash)打开这个脚本文件,开始读取文件的内容。
- shell程序一行一行读取脚本文件的内容,对每一行代码进行解释执行。
- 当遇到命令行,shell程序 fork一个新的进程来执行这个命令。如果是内置命令,shell程序自己执行。执行结束后,shell程序继续读取脚本文件的下一行。
- 这样一行一行执行,直到文件结束,该脚本执行完成。
- 在执行的过程中,可以使用变量、条件判断、循环等程序语言的概念,这就是为什么shell脚本也被称为一种脚本语言。
- shell脚本可以用来自动化完成一些重复繁琐的任务,比如文件处理、系统管理等工作。只需要编写好脚本,然后执行,就可以完成任务而不需要手动反复操作。
调试和前端集成
调试: 可以通过log、set命令或是VsCode debug插件来进行调试。 前端集成:shell脚本的前端集成主要通过两种方式完成:1. source 命令:这个命令会在当前shell环境中执行指定的shell脚本。例如有一个脚本文件script.sh,你可以在shell中输入:
bash
source script.sh
这会直接在当前shell中执行script.sh脚本的内容,所以脚本中定义的变量、函数等会直接生效。这是最简单的前端集成方式。2. . 号命令:这也产生和source命令相同的效果,只是语法更简洁。你可以输入:
bash
. script.sh
这会直接执行脚本并在当前shell生效。3. 直接执行脚本:除了上面两种集成到当前shell的方式外,你也可以直接像执行其他命令一样执行shell脚本:
bash
/path/to/script.sh
这会启动一个新的shell来执行整个脚本。这个shell结束后,原来的shell不受任何影响。这不能算是前端集成,只是简单的执行脚本的方式。4. 函数集成:你可以在shell脚本中定义函数,然后在其他shell脚本或直接在shell中调用这些函数。例如脚本file1.sh:
bash
func1() {
echo "This is a function!"
}
然后在shell中:
bash
. file1.sh # 函数定义生效
func1 # 调用函数,会输出This is a function!
这种通过定义函数,然后在其他脚本或shell中调用的方式也属于一种前端集成的方式。总之,通过source、.号命令和函数定义等方式可以将shell脚本的定义环境变量、函数集成到当前shell或其他shell脚本中。