What Shell Scripting Is and Why You Should Learn It
讲座描述
In this lesson, you will learn:
What shell scripts are.
Why you should learn bash shell scripting.
How shell scripts can be helpful to you.
Shell scripting examples and use cases.
通过完整课程学习更多知识
Linux Shell Scripting: A Project-Based Approach to Learning
Learn how to shell script through project-based training (Bash Scripting, Bash Programming, Sed, Grep, Awk, and More)
11:31:03的随选视频 • 更新于 October 2026
Write your very own Linux shell scripts using the concepts you learned in this course.
简体中文 [自动]
在本课中, 我们将了解什么是shell脚本, 为什么要学习它们, 以及它们对您有什么帮助。 首先, shell脚本只是一个包含一系列Linux命令和shell语句的文件。 shell脚本本身(即文件)由ASCII文本(也称为纯文本)组成。 这意味着您需要使用文本编辑器来创建shell脚本。 一些好的命令行文本编辑器包括vim、 emacs和nano。 如果您希望在桌面环境中使用图形用户界面创建shell脚本, 可以使用Atom、 Sublime Text、 Notepad++和Text Wrangler等文本编辑器。 我说话很小心。 我说文本编辑器是有原因的。 请勿使用Microsoft Word、 Libreoffice Writer或Apple Pages等文字处理器创建shell脚本。 许多字处理程序会添加附加格式并更改您正在键入的文本。 文字处理软件通常会把普通的直引号变成弯引号。 shell脚本中的直引号实际上是语法的一部分, 因此使用花引号或弯引号将导致shell脚本报告错误或产生一些意外行为。 此外, 这些纯文本文件不包括任何其他类型的特殊格式, 如粗体文本、 斜体等。 当执行shell脚本时, 它会依次执行脚本中列出的命令。 它从文件的顶部开始, 一次执行一行命令, 直到文件结束。 执行shell脚本将产生完全相同的结果, 就像您直接在终端中手动键入每行一样。 因此, shell脚本是包含一系列命令的纯文本文件。 但是为什么要将一系列命令保存到脚本中呢? 对于初学者来说, 它可以为你节省大量的工作时间。 每当您发现自己在终端中输入多个shell命令以完成某个任务, 并且将来需要再次执行该任务时, 就应该编写一个shell脚本。 一旦确定了完成工作所需执行的命令集, 就可以将这些命令放在shell脚本中, 并在下次需要执行该任务时直接执行脚本本身。 如果这是一项必须定期完成的任务, 那就更好了, 因为您可以编写一个shell脚本, 然后安排该脚本在某个时间运行, 这样您就再也不必自己执行了。 因此, shell脚本允许您通过自动化消除重复性任务, 从而保存了您的时间和精力。 这意味着您不必一遍又一遍地键入相同的命令, 而是可以将这些时间用于执行更有价值和更高级别的任务。 编写shell脚本的另一个好时机是, 对于您必须多次执行但很少执行的任务。 我将给予一个我在以前的工作中必须完成的任务的例子。 每次发布此特定应用程序的新版本时, 我都必须将生产数据库的副本放入测试环境中, 以便可以在生产端针对实际生产数据测试应用程序的新版本。 这包括挂起对数据库的权限、 创建基础SAN磁盘的克隆以及恢复数据库。 对于我最初的观点, 因为我很少这样做, 我最终会忘记启动克隆的命令和与之配套的所有选项。 每次我这样做的时候, 我都不得不花一些时间重读手册页, 或多或少地重新教自己如何做这个过程。 仅此一点就足以让我创建一个shell脚本。 如果我们超越我最初的观点”这是我很少做的事情”, 那么还有另一个原因需要编写shell脚本。 您可以看到, 我希望确保生产数据库暂停的时间尽可能短。 我编写了shell脚本, 以便一旦克隆成功启动, 它就会恢复数据库。 这样, 我就不必手动重新检查克隆状态, 然后手动键入命令来恢复数据库。 剧本做到了, 而且比人类做得还快。 从这个例子中得出的第三个结论是, 由于这是公司最有价值的数据库, 我真的不想冒任何风险, 犯错误。 一旦我在非生产环境中测试了我的脚本, 我就可以让它完成挑选所有正确的磁盘、 键入带有正确选项的所有正确命令等艰苦工作。 使用好的脚本可以减少出错的机会。 很多时候我不得不在午夜做这件事, 那时我很累, 不像平时那么警觉。 当你累的时候, 犯错的机会就会增加。 因此, 以shell脚本的形式提供一些额外的帮助对我来说是一件非常好的事情。 如果您想将任务委派给经验不足或知识不足的员工, 请为其创建一个shell脚本。 如果您对如何执行某项工作有一些特定的了解, 则可以将这些了解放在shell脚本中。 shell脚本对其他人来说就变成了一个黑盒子, 但是他们仍然可以使用它来获得同样的结果。 以员工离职流程为例。 假设人力资源部门的某个人提交了一个帮助台票证, 以通知信息技术部门某个给定的员工已经离开公司。 然后, 帮助台将该票证转给您, 以便您可以锁定所有Linux系统上的Linux帐户。 如果您创建了一个执行该工作的shell脚本, 则可以将此任务交给帮助台。 他们不需要知道shell脚本实际工作方式的所有细节, 他们只需要如何以及何时使用它的说明。 这样你就可以从特定的任务中解放出来。 如果您需要来自多个命令或源的信息, 这是创建shell脚本的另一个好时机。 如果你发现自己在做笔记, 这是一个好迹象, 说明有一种更简单的方法来做。 例如, 假设您管理一个web服务器, 对于每个生成web服务器错误的IP地址, 您希望知道其主机名并查看其访问过的所有网页。 如果您手动执行此操作, 则必须查看错误日志并记下每个IP地址。 例如, 您可能会复制并粘贴这些IP地址, 并将它们放入一个碎片文件中, 然后您要做的是查找每个IP地址以确定它们的主机名。 最后, 您可以在web服务器访问日志中搜索这些IP地址。 现在, 您可以编写一个shell脚本来完成整个过程, 并以易于使用和阅读的格式显示该脚本。 好了, 我已经给了你一些shell脚本的例子。 当你想起来的时候, shell脚本实际上只是用shell语言编写的计算机程序。 那么, 为什么要选择用shell编写程序, 而不是用C或C++这样的编译语言编写程序呢? 主要原因是发展速度。 例如, 您可以编写一个shell脚本, 通过首先归档一组文件, 然后通过网络将该归档文件复制到另一台服务器来执行简单的备份。 您只需几行shell代码就可以完成此操作, 而且速度相当快。 然而, 在C语言中完成同样的任务将花费大量的时间和精力。 在编写shell脚本时, 不必担心低级编程对象, 如字节、 指针、 声明数据类型等。 shell是一种高级语言, 允许您简单明了地表达复杂的操作。 与开发速度相关的是学习如何编写shell脚本的容易程度和速度。 如果您已经使用了命令行, 那么创建shell脚本的飞跃就很小了。 您只需要学习一些shell特定的操作符和规则, 就可以开始了。 当然, 如果您想学习高级技术并编写非常复杂的shell脚本, 这将花费更多的时间和精力, 但是对于简单脚本来说, 初始学习曲线相对较低。 公平地说, 开发的容易程度和速度是有代价的。 这种折衷是以牺牲性能和效率为代价的。 您在30分钟内编写的shell脚本的执行速度将不如用C++编写的等效程序(可能需要几天时间)快, 但这种权衡通常是非常值得的, 特别是当shell脚本的运行速度足以达到预期目的时。 您可以为几乎任何事情创建shell脚本, 但真实的的最佳点通常是系统管理和报告测试, 在这些测试中, 完成工作比快几微秒完成工作更重要。 我希望您记住, 您可以在命令行上执行的任何任务都可以通过shell脚本自动执行。 我想再看一遍。 您可以在命令行中执行的任何任务都可以通过脚本自动执行。 当然, 有些脚本会比其他脚本更难, 但您可以做到。 在本课程中, 我们将从简单的示例一直介绍到非常复杂的情况, 在这些情况下, 许多人可能认为实际上不可能自动执行这样的任务。 简要回顾一下, shell脚本是一个包含一系列命令的纯文本文件。 当执行shell脚本时, 它会从脚本的顶部开始逐行执行脚本中列出的命令, 就像您自己键入命令一样。 Shell脚本可以为您节省大量的工作时间。 您可以完全自动化繁琐或重复的任务。 您可以通过向其他人提供执行操作的脚本来将工作移交给他们。 脚本还可以作为您在中经常执行的进程或过程的文档形式。 通常, shell脚本编写起来相当快速和容易。 您可以专注于完成手头的目标, 而不是把时间花在担心低级编程任务上。 最后, 您可以在命令行上执行的任何操作都可以通过shell脚本自动执行。