【小知识】 shell 脚本工作原理浅析

1,408 阅读4分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。

前言

我们对操作系统(OS)其实并不陌生,从接触电脑开始,我们就已经进入到Windows操作系统或者MAC 操作系统

当我们学习操作系统这门课时,全面地认识操作系统从Unix到Linux再到现代的Windows、MAC操作系统的演进

由于Linux是基于服务器端、使用Linux内核,命令行控制操作且开源的特性,Linux系统一直流行在我们日常生活,比如物联网智能家电TV、AI音箱等都是搭载的Linux系统

Linux系统一般由两部分组成:用户空间、内核空间(kernel)

本期,我们将学习Linux系统中,连接用户空间和内核空间的工具shell,为Linux进行传递命令

shell 概述

shell 是Linux系统的用户界面,为用户和内核进行交换操作的一种桥梁。shell 接收用户输入的命令并把它送入内核去执行。

shell 特点:

  • shell 是一个命令解释器:它将用户输入的命令进行解释之后送到内核进行运行
  • shell 是一个程序设计语言:它定义各种变量和参数,并提供控制结构,如循环和条件判断

shell 工作流程

shell 本身是C语言程序,作为命令语言解释器,拥有自身内建的shell 命令集。

系统中其他应用程序也能调用Shell命令

同时,作为Linux系统的一部分,shell 能调用Linux系统核心的大部分功能来执行程序,协调各个程序运行

shell 接收到用户传来的命令后,主要执行以下步骤:

  1. shell 检查命令是否是内部命令
  2. 如果不是内部命令,shell会在搜索路径中,检查是否是有某个应用程
  3. 如果没有找到应用程序(可执行文件),将会显示一条错误的信息
  4. 如果检查到是内部命令或者应用程序,shell会将内部命令或者应用程序分解为系统调用,并传给Linux内核

shell 类型

在Linux系统中,默认将bash作为默认的shell

目前流行的shell主要有5种:

  • ash(ash shell)

    ash 是 Linux 系统中占用资源最小的shell,只包含24个命令

  • bash(BournAgain shell)

    BourneAgain shell 是 Linux 系统中默认使用的shell,内部命令拥有40个,兼容Bourn shell,有许多特性。

    1. 提供命令快速查询功能,可用方向键查询、快速输入命令、修改命令
    2. 可支持命令自动补全功能
    3. 提供提示符下面的help查询相关的指令的操作帮助
  • ksh(Korn shell)

    Korn shell 拥有42个命令,可与商业版ksh完全兼容

  • csh(C shell)

    csh 是 指向 /bin/tcsh 的shell,在Linux中占比最大内核,共有52个内部命令

  • zch

    zch 拥有最多的内部命令的shell,共84个内部命令。

shell 优缺点

shell 不仅是命令解释器,还是解释性程序设计语言,因此可以在众多的使用场景中去使用shell。

shell 优点:

  • 语法简单,上手快速
  • 命令查找迅速
  • 解释性语言,不需要编译
  • 脚本开发效率高,可以快速替代重复性步骤
  • 通过 awk、sed 来快速处理文本方面的需求

shell 缺点:

  • 对于复杂问题,实现繁琐,表达式不易阅读
  • 对于变量定义传参,不直观,易造成误导
  • 由于shell本身是一个接口,执行任务,需要开销大量的系统资源

shell使用场景:

  • 对复杂的命令步骤如git上传代码,集成化一个步骤
  • 替换一些必要的步骤如安装APK等步骤,自动化脚本
  • 软件自动打包、编译、发布等功能
  • 清空磁盘文件,创建文件等操作

总结

本次,我们对Linux系统组成、shell工作流程、种类等进行了解和学习,对shell脚本特点和使用场景进行掌握。

shell脚本是一个解释性编程语言,它凭借着语法简单、快速上手的特点,在我们工作场景中,随处可见

以上是本期内容,欢迎大佬们点赞评论,下期再见~