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

91 阅读2分钟

学习shell的价值

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

课程准备

  • 一台安装了 Linux系统的物理机或者云主机,可以运行shell脚本
  • 本地的vscode安装Bash Debug插件,并升级bash到4.x以上
  • npm全局安装zx依赖

01 Shell基本概念

在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(command interpreter,命令解析器)。它类似于DOS下的COMMAND.COM和后来的cmd.exe。

Shell就像一个壳层,这个壳层介于用户和操作系统之间,负责将用户的命令解释为操作系统可以接收的低级语言,并将操作系统响应的信息以用户可以了解的方式来显示。

Shell是一个应用程序,它连接了用户和Linux内核,让用户能够更加高效、安全、低成本地使用Linux内核。Shell本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序。

01_ 构成

  1. shell:解释器,编程语言
  2. 解释器:bash内置命令,GUN核心工具集,第三方库
  3. 编程语言:变量,运算,语句,函数

02 命令和语法

02_ 自定义变量

#!/bin/bash

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

page_size=1

page_num=2

#将命令复制给变量

_ls=ls

#将命令结果赋值给变量

file_list=${ls -a}

#默认字符串,不会进行+运算

#声明变量为整型

let total=page_size*page_num

#导出环境变量

export total

declare -x total

02_ 配置文件加载

  • login-shell
  • non-login-shell

第一种shell是用户登录时打开的shell,而第二种是登录之后打开的shell。其中国非登录式shell还可分为交互式和非交互式,交互式就是普通模式,非交互式就是用sh打开某个文件的shell

02_ 重定向

屏幕截图 2023-04-15 160128.png

屏幕截图 2023-04-15 160210.png

02_ 分支语句

屏幕截图 2023-04-15 160224.png

语法1:

if condition ; then
    程序段
elif condition ; then
    程序段
esle
    程序段
fi

语法2:

case $变量 in:
    "第一个变量内容")
        程序段
        ;;
    "第一个变量内容")
        程序段
        ;;
    *)
    程序段
esac

02_ 函数

屏幕截图 2023-04-15 160243.png

  • shell自上而下执行,函数必须在使用前定义
  • 函数获取变量和shell script类似,0代表函数名,后续参数通过0代表函数名,后续参数通过1,$2...获取
  • 函数内return仅仅表示函数执行状态,不代表函数执行结果
  • 返回结果一般使用echo,printf,在外面使用$(),``获取结果
  • 如果没有return,函数状态是上一条命令的执行状态,存储在$?中

03 执行过程和原理

03_执行过程

  1. 字符解析
  • 识别换行符、分号做行的分割
  • 识别命令连接符(|| && 管道)做命令的分割
  • 识别空格、tab符,做命令和参数的分割
  1. shell展开,例如{1..3}解析为1 2 3
  2. 重定向,将stdin,stdout,stderr的文件描述符进行指向变更
  3. 执行命令
  • builtin直接执行
  • 非builtin使用$PATH查找,然后启动子进程执行
  1. 收集状态并返回

04 调试和前端集成

04_ 调试

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

04_ Vscode配置

  1. shellman:代码提示和自动补全
  2. shellcheck代码语法检验
  3. shell-format:代码格式化
  4. Bash Debug:支持单步调试
  • 安装vscode插件
  • 编写launch.json文件
  • 升级bash到4.x以上版本

04_ 前端集成

  1. node中通过exec、spawn调用shell命令
  2. shell脚本中调用node命令
  3. 借助zx等库进行js、shell script的融合
  • 借助shell完成系统操作,文件io、内存、磁盘系统状态查询等
  • 借助nodejs完成应用层能力,网络io、计算等

总结

屏幕截图 2023-04-15 160055.png