Shell 脚本和编程
学习Shell的价值
1.linux服务器的基本操作和管理
2.前端NOde。js服务器的进程管理,问题排查,资源监控等运维操作
3.使用shell编写TCE,SCM,Docker脚本,完成服务编译和部署。
况且作为计算机专业的学生,学习Linux是非常有价值的。Linux是一个广泛使用的操作系统,可以在多种硬件平台上运行,具有很高的可靠性和稳定性。学习Linux可以帮助我们更好地理解操作系统的工作原理,提高系统的运行效率和安全性。
课程准备
·一台安装了linux 系统的物理机或者云主机,可运行 shell 脚本
·本地的 vscode 安装 Bash Debug 插件,并升级 bash 到4.x以上
·Npm 全局安装 zx 依赖
课程内容
shell基础概念
什么是shell
shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包括ls、cd、pwd等等。总结来说,Shell是一个命令解释器,它通过接受用户输入的Shell命令来启动、暂停、停止程序的运行或对计算机进行控制。 shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。 shell 本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序。
什么是shell脚本
shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。 shell脚本中最重要的就是对shell命令的使用与组合,再使用shell脚本支持的一些语言特性,完成想要的功能。
变量
Shell编程中变量分为三种,分别是系统变量、环境变量和用户变量,Shell变量名在定义时,首个字符必须为字母(a-z,A-Z),不能以数字开头,中间不能有空格,可以使用下划线(_),不能使用(-),也不能使用标点符号等。
系统环境变量
环境变量也称为全局变量,可以在创建他们的Shell及其派生出来的任意子进程Shell中使用,环境变量又可以分为自定义环境变量和bash内置的环境变量,环境变量可以在命令行中设置和创建,用户退出命令行时这些变量值就会丢失,想要永久保存环境变量,可写在文件中
命令和语法
Shell是一个命令行解释器,它为用户提供了一个面向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,但Shell脚本是解释执行的,不需要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一行敲到Shell提示符下执行。
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
运算符是对计算机发出的指令
运算对象:
- 数字,字符
- 变量
- 表达式:运算符和运算对象的组合体
运算符类型:
&[ ] 告诉shell对方括号中的表达式求值。
按位运算符:
~(反运算符),<<(左移) ,>>(右移),&(与),|(或),^(异或)
执行过程和原理
- 读取从键盘输入的命令
- 判断命令是否正确,且将命令行的参数改造为系统调用execve () 内部处理所要求的形式
- 终端进程调用fork () 来创建子进程,自身则用系统调用wait () 来等待子进程完成
- 当子进程运行时,它调用execve () 根据命令的名字指定的文件到目录中查找可行性文件,调入内存并执行这个命令
1.大括号展开(Brace Expansion)(...)
2.波浪号展开(Tilde Expansion)
3.参数展开(Shell Parameter Expansion)
4.命令替换(Command Substitution)
5.数学计算(Arithmetic Expansion) $ll..))
6.文件名展开(Filename Expansion)*?[..]外壳文件名模式匹配
调试和前端集成
调试方式一:sh test.sh 直接显示找不到,报错,但是不说在哪
调试方式二:sh -x test.sh 加上-x会显示错在哪,显示脚本里面的内容,并且还会报错,显示过程
VSCode配置
1.shellman: 代码提示和自动补全
2.shellcheck:代码语法较量
3.shell —— format:代码格式化
4.Bash DEbug:支持单步调试
前端集成
1.node中通过对exec、spawn调用shell命令;
2.shell脚本中调用node命令 3.借助zx等库进行javascript、shell script的融合
学习心得
通过本次的shell脚本和编程学习。我深切的体会到了shell简单、灵活,对于linux系统的自动化管理非常有帮助,可以让系统管理员的工作变得容易、简单、高效。shell脚本可以在unix和linux系统中灵活移植。shell脚本方便获取和修改源码,不需要编译。shell在linux很多地方都用到,熟悉shell命令,可以帮助解决一些故障问题。对于一个系统运维工程师来说是必要的。而且面试都会涉及到shell编程的内容。帮助我在这方面取得很大的成效和进步。