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

102 阅读2分钟

前言

本节课简单介绍了Shell的基础知识,理论加实践,让我们更好的理解Shell脚本的强大之处。

1.Shell基础

1.概念

  • 终端:获取用户输入、展示运算结果的硬件设备
  • tty:在linux中是输入\输出环境
  • 终端模拟器:关联虚拟 tty 的输入输出软件
  • Shell:处理来自终端模拟器的输入, 解释执行之后输出结果给终端

物理终端=>软件终端tty=>终端模拟器=>shell

2.发展历史

image.png

3.构成

image.png

  • 定位
    • 提供了与内核和设备交互的方法
    • 集成了一些今天软件开发中通用的设计模式(比如管道和过滤器)
    • 具备控制流程,循环,变量,命令查找的机制
    • 命令解释器(提供给用户接口)
    • 一门编程语言

2.语法和命令

1.变量

整体分类如下: image.png 这里我们主要介绍环境变量,在配置环境中常常使用相应的操作。 image.png

2.配置文件

常用配置操作: source ~/.bashr

  • 分类
    • 通过系统用户登录默认运行的shell
    • 非登录交互式运行shell
    • 执行脚本运行非交互式shell

不同方法的流程如下: image.png

login shell:取得 bash需要完整的登录流程,如ssh 远程登录一台主机

non-login bash:不需要登录的bash,如在原来的 bash 中执行 bash开启子进程、执行一些外部命令(需要我们重启终端或者执行 source 命令)

3.运算符

image.png

4.管道

  • 作用:将前一个命令的结果传递给后面的
  • 命令语法:cmd1 | cmd2
  • 要求:管道右侧的命令必须能接受标准输入才行,比如grep命令, Is,mv等不能直接使用,可以使用xargs预处理
  • 注意:管道命令仅仅处理 stdout,对于 stderr 会予以忽略,可以使用 set -o pipefail 设置 shell 遇到管道错误退出

5.重定向

  • 输出符号
    • : 覆盖写入文件

    • :追加写入文件

    • 2>:错误输出写入文件
    • &>:正确和错误输出统一写入到文件中
  • 输入符号
    • <
    • << image.png

6.命令

常用命令如下: image.png

  • 判断命令语法

    • test condition
    • [ condition ]
    • [[ condition ]]
  • 分支命令语法

    • if else
    • case
  • 循环命令语法

    • while循环:while condition ; do程序段; done
    • until循环:until condition ; do 程序段; done
    • for循环:for var in [words...]; do程序段; done
  • 函数命令语法

    • funcName(){ echo "abc"; }
    • function funcName() { echo "abc"; } image.png

3.执行过程和原理

1.执行过程

2.shell展开