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

79 阅读2分钟

Shel l是一种命令行界面,也是一种编程语言, 熟练掌握 Shell 能够大大提升 Unix/Linux环境下的工作效率。本课程将从其发展历史、基础语法开始,通过示例逐步深入, 不仅帮助大家学会使用 Shell ,也在一定程度上去理解 Shell 的执行原理和语法设计。

学习shell的价值

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

Shell基础概念

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

发展

image.png

构成 image.png

命令和语法

  • 变量

image.png

image.png

  • 自定义变量
    • 变量名=变量值(等号左右不能有空格) 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

  • 配置文件加载

image.png

  • 运算符和引用

image.png

  • 管道

image.png

  • 重定向
    • 输出重定向符号
    >:覆盖写入文件        
    >>:追加写入文件         
    2>:错误输出写入文件
    &>:正确和错误输出统一写入到文件中
*输入重定向符号
<
<<

image.png

  • 判断命令

image.png

image.png

  • 分支语句
    • 语法一
    if condition;then
    程序段
    elif condition ; then
    程序段
    esle
    程序段
    fi
* 语法二
case $变量 in:
“第一个变量内容")
    程序段
    ;;
  “第一个变量内容")
    程序段
    ;;
    *)
    程序段
    ;;
    esac

image.png

image.png

  • 循环
    • while
    while condition ; do 程序段;done
*   until
    until condition ; do 程序段;done
*   for
    for var in [words...];do 程序段;done

image.png

image.png

  • 函数
    • 语法一

funcName(){echo "abc";}

* 语法二
function funcName(){echo "abc";}

image.png

image.png

  • 模块化
    • 模块化的原理是在当前Shell内执行函数文件,方式:

      source[函数库的路径]

image.png

  • 常用命令

image.png

执行过程和原理

  • 执行
    • Shell脚本一般以 .sh结尾,也可以没有,这是一个约定,第一行需要指定用什么命令解释器来执行
#! /bin/bash     
#! /usr/bin/env bash
* 启动方式

image.png

  • 执行过程

    • 字符解析

    识别换行符、分号(;)做行的分割

    识别命令连接符(|| && 管道)做命令的分割

    识别空格、tab符,做命令和参数的分割

    • shell展开,例如{1..3}解析为 123
    • 重定向,将stdin、stdout、stderr的文件描述符进行指向变更
    • 执行命令

    builtin 直接执行

    非builtin 使用 ¥PATH 查找,然后启动子进程执行

    • 收集
  • shell展开

image.png

* 大括号展开

image.png

* 波浪号展开

image.png

* 参数展开

image.png

* 命令替换

image.png

* 数学计算

image.png

* 文件名展开

image.png

调试和前端集成

image.png