shell脚本与编程|青训营笔记

138 阅读2分钟

学习Shell的价值

  1. linux服务器的基本操作和管理
  2. 前端Node.js服务的进程管理、问题排查、资源监控等运维操作
  3. 使用shell编写TCE、SCM、Docker脚本,完成服务编译和部署

shell基础概念

shell是处理来自终端模拟器的输入,解释执行之后输出结果给终端。Bash是shell的一种具体实现。

shell的发展

  • Ken Thompson(来自贝尔实验室)在1971年为UNIX开发了第一个shell,称为V6 shell。
  • Stephen Bourne在贝尔实验室为V7 UNIX所开发的Bourne shell,即sh。
  • 开源组织GNU为了取代Bourne shell开发的Bourne-Again shell,即Bash。

语法命令

shell当中的变量分为三种,自定义变量、环境变量和系统环境变量。自定义变量的作用域是在当前的shell中;环境变量的作用域是在当前shell及其子shell中;系统环境变量是在所有shell中。

网页捕获_21-4-2023_145041_juejin.cn.jpeg

网页捕获_21-4-2023_145113_juejin.cn.jpeg

image.png 然后引入个概念-管道,管道与管道符,作用是将前一个命令的结果传递给后面的命令。 重定向:输入输出重定向可以修改错误,增加新文件。输入是>,>>,2>,&>.输出是<,<<。

判断命令

shell提供了text,[,[[三种判断符号,可用于整数测试,字符串测试,文件测试。

image.png

需要注意的是中括号前后要有空格符。[和text命令,只能支持自己使用的标志位;>,<,=只能用来比较字符串;中括号内的变量最好都是用引号括起来。[[更丰富,在整型中比较支持在<,>,=.

循环

shell的循环语句跟c语言有点像,都是while,for until语句循环。

image.png

执行过程和原理

shell脚本一般以.sh结尾,也可以没有,这是一个约定;第一行需要指定用什么命令解释器来执行。因为在Linux中我们是以结尾来判断是什么脚本的。启动shell脚本有三种方式,第一是直接以文件名运行,第二是解释器运行,第三是source运行。

执行过程

  1. 字符解析
  2. shell展开,例如将{1..3}解析为1,2,3
  3. 重定向,将stdin,stdout,stderr的文件描述符进行指向变更。
  4. 执行命令。builtin直接执行,非builtin使用$PATH查找,然后启动子进程执行。
  5. 收集状态并返回。