Shell 脚本和编程 | 青训营笔记

80 阅读2分钟

这是我参与的笔记创作活动的第2天

基本概念

  • 终端:获取用户输入,展示运算结果的硬件设备。

  • tty:teletypeWriter 的简称,和终端等价,早期指电报打印机,当前为一个在 linux 中是输入输出环境。

  • 终端模拟器:Mac Terminal、iTerm2 等,关联虚拟 tty 的输入输出软件。

  • Shell:command interpreter,处理来自终端模拟器的输入,解释执行之后输出结果给终端。

  • Bash:Shell 的一种具体实现。

课程重点

  • shell 基础和语法
  • shell 执行过程和原理
  • shell 调试和前端集成

学习shell的价值

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

发展

  • Ken Thompson(来自贝尔实验室)在 1971 年为 UNIX 开发了第一个 shell,称为 V6 shell

  • Stephen Bourne 在贝尔实验室 为 V7 UNIX 所开发的 Bourne shell,即 sh

  • 开源组织 GNU 为了取代 Bourne shell 开发的 Bourne-Again shell,即 Bash

构成

shell不仅提供了与内核和设备交互的方法,还集成了一些今天软件开发中通用的设计模式(比如管道和过滤器),具备控制流程,循环,变量,命令查找的机制。

既是命令解释器,也是一门编程语言作为命令解释器它提供给用户接口,使用丰富的GNU工具集,第三方的或者内置的,比如cd、pwd、exec、test、netstat等等

命令和语法

变量

image.png

父子shell

当前shell进程就是父进程,当父进程在第三方或核心工具时会启动子进程去执行,执行完后交还给父进程,父进程再继续执行下一条命令。 image.png

管道

管道与管道符|,作用是将前一个命令的结果传递给后面的命令

语法:cmd1 | cmd2

要求:管道右侧的命令必须能接受标准输入才行,比如grep命令,ls、mv等不能直接使用,可以使用xargs预处理