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

48 阅读2分钟

Shell 脚本和编程 (讲师:陈健)

1 shell基础概念

  • 终端:获取用户输入、展示运算结果的硬件设备
  • tty:teletypeWriter的简称,和终端等价,早期指电传打印机,在linux 中是输入/输出环境
  • 终端模拟器:Mac Terminal、iTerm2等,关联虚拟tty的输入输出软件
  • Shell:command interpreter,处理来自终端 模拟器的输入,解释执行之后输出结果给终端
  • Bash:shell的一种具体实现

image.png

image.png

Shell不仅提供了与内核和设备交互的方法,还集成了一些今天软件开发中通用的设计模式(比如管道和过滤器),具备控制流程,循环,变量,命令查找的机制。既是命令解释器,也是一门编程语言。作为命令解释器,它提供给用户接口,使用丰富的GNU工具集,第三方的或者内置的,比如cd、pwd、exec、test、netstat等等

2 命令和语法

image.png

image.png

自定义变量:

#!/bin/bash

# 变量名=变量值 (等号左右不能有空格)
page_size=1
page_num=2

# 将命令复制给变量
_ls=ls

# 将命令结果赋值给变量
file_list=$(ls-a)

# 默认字符串,不会进行 + 运算
total=page_size*page_num

# 声明变量为整型
let total=page_size*page_num
declare -i total=page_size*page_num

# 导出环境变量
export total
declare -x total

image.png

系统环境变量:

image.png

配置文件加载:

image.png

通过系统用户登录默认运行的shell

非登录交互式运行shell

执行脚本运行非交互式shell

如果取得 bash 需要完整的登录流程,我们称之为login shell,比如 ssh 远程登录一台主机

不需要登录的bash我们称为non—login bash,比如在原来的bash 中执行bash开启子进程、执行一些外部命令如果修改了配置文件,不会立即生效,需要我们重启终端或者执行 source 命令

image.png

管道:

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

语法:cmd1 | cmd2

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

注意:管道命令仅仅处理stdout,对于stderr可以忽略,可以使用set -o pipefail设置 shell遇到管道错误退出

image.png

重定向:

image.png

3 执行过程和原理

  1. shell脚本一般以.sh结尾,也可以没有,这是一个约定;第一行需要指定用什么命令解释器来执行

image.png 2. 启动方式

image.png

image.png shell展开:

image.png

4 调试和前端集成

调试:

  1. 普通log,使用echo、printf
  2. 使用set命令
  3. vscode debug插件

image.png

image.png

image.png