章节索引 :

Shell 简介

1. Shell 概述

1.1 Shell 是什么

我们要系统性地学习 Shell 脚本,首先需要知道什么是 Shell,Shell 翻译过来为壳,例如大家常见的壳牌石油的图标上面的贝壳,顾名思义其就是一个套在操作系统外层的壳,用户可以通过与这层壳的交互,将自己的需求利用这层 Shell 来执行来实现对服务器的操作。我们可以认为 Shell 是将用户的命令解析为内核可以执行的命令,起到命令解释的作用,是用户与操作系统直接的一个桥梁纽带。

1.2 为什么要用 Shell

我们想让操作系统为我们干一件事情,我们不需要去了解内在的内核指令,而是只需要了解可以操作系统的 Shell 命令即可,Shell 为我们屏蔽来操作系统底层的细节,也出于安全性考虑,不能让用户随意的进行操作系统内核的操作,通俗来说,shell 就是让用户更简单的操作计算机。

1.3 Shell 脚本是什么

我们知道了 Shell 是一个用户与 Linux 系统内核的通讯的桥梁后,那么 Shell 脚本是什么呢?

Shell 脚本就是操作 Shell 的指令集合编写成的一段实现目的需求的代码,也为一种管理 Linux 系统的脚本语言,我们可以简单地将其理解为,Linux 的各种指令加上一些流程控制和数据的集合,因为它还有不少的语法及格式,后面我们来通过学习,详细剖析其内在精髓。

1.4 市场位置

目前 Shell 脚本由于其作为直接与 Linux 系统交互,在批量 / 定时任务中有着独特无可取代的作用,不管是运维人员还是开发人员熟练掌握 Shell 脚本,都会给日后的工作带来非常大的便利,Shell 作为一种脚本语言,编写完源码后不用编译,直接运行源码即可,是实现 Linux/UNIX 系统管理及自动化运维所必备的重要工具, 只有熟练掌握 Shell 才能提升运维人员的工作效率,适应日益复杂的工作环境,减少不必要的重复工作,从而为个人的职场发展奠定较好的基础。

2. Shell 分类

我们知道与 Linux 内核我们打交道的都有什么呢?通常有两种方式,即图形界面 (GUI Shell)和终端命令行 (CLI Shell)。

2.1 GUI Shell

如果我们不熟悉 Linux 命令,我们通过 VNC 登录到 Linux 系统后,利用鼠标去双击文件夹进入目录,或新建文件夹,编辑文件,安装 rpm 包等,这些操作都是利用 GUI Shell 与 Linux 系统内核通讯,它为我们构造了一套类似 Windows 的界面优化的桌面环境,目前的桌面环境例如 Gnome/KDE 等,此类为 GUI Shell。

2.2 CLI Shell

Linux 作为服务器端,运行桌面环境非常消耗资源,因此 CLI Shell 才是我们本次的重点,其根据不同的系统有很多种类。
例如我们最常用的主流版本的 Linux 系统 CentOS/RHEL 的默认 Shell 为 bash,当然还有很多其他的 Shell,为什么有这么多类型的 Shell 内核,因为对于不同的操作系统类型,其内核都难免存在差异,因此与内核交互的 Shell 也就分了不少种类,目前在 Linux 系统上主流的 CLI Shell 都为 Bash,是许多 Linux 发行版默认的 Shell。我们可以在 Linux 系统上 cat /etc/shells 来查看本版本支持的各 Shell 类型,同时可以利用命令 echo $SHELL 来查看当前环境中的默认 Shell,不同的 Shell 都有其各自的特点,目前主流的 Shell 类型如下:

  • Bourne Again Shell(/bin/bash):其为目前主流 Linux 发行版默认的 Shell,其也是 Bourne shell 最早的发行并免费的版本,用户可以利用其 help 命令来查看几乎 Shell 的所用功能;
  • Bourne Shell(/usr/bin/sh 或 /bin/sh):是一个快捷方式,后来已经被 /bin/bash 所取代;
  • C Shell(/usr/bin/csh):简单高效,其使用类似 C 语言的语法,后已被 tcsh 取代;
  • K Shell(/usr/bin/ksh):Korn shell 的语法与 Bourne shell 相同,同时具备了 C shell 的易用特点,许多安装脚本都使用 ksh。

3. 应用场景

  • 应用安装:我们都知道在 Linux 服务器经常需要我们安装配置一些软件或配置环境,人手工的一条命令一条命令执行,很容易出现错误,而且如果成百上千台服务器,那么此场景下 Shell 脚本就非常适合,编写一个应用安装配置脚本,后期可以重复使用,且不容易出错,Shell 脚本适用于重复性的工作;
  • 定时任务:例如我们需要每分钟上报服务器的各项性能指标到监控服务端,此时可以写一个采集系统各项指标的脚本,然后配合定时任务来每分钟执行指标数据上报,Shell 脚本非常适用于周期性的工作;
  • 应用操作:例如我们自己写的应用,可以为其编写启动 / 停止 / 重启等操作的脚本,将脚本添加进系统环境中,后期很方便进行服务管理;
  • 备份恢复:可以利用脚本来进行网站文件或数据库的异地备份,以及恢复到测试环境进行验证等;
  • CI/CD: Shell 脚本适用于 DevOPS 中的在服务器中持续集成持续部署的 pipeline 流程中,适用于应用发布最后一公里配置;
  • 其他:当然 Shell 还可以做一些其他工作,比如运算 / 生成报表,甚至有大佬用 Shell 编写游戏等,可以根据自己的需求来利用好 Shell 脚本来为自己服务。

4. 学习基础

学习 Shell 脚本非常简单,需要有一台 Linux 系统,系统类型可以是 CentOS/RedHat 或 Ubuntu,由于不同的系统使用的 Shell 类型可能存在异常,建议使用 CentOS 7 系统来学习本示例。