Bash

提升 Bash 工作效率 - 技巧与窍门

当您一天中的大部分时间都在 bash shell 环境中度过时,一遍又一遍地输入相同的命令是很常见的,这几乎就是疯狂的定义。幸运的是,bash 为我们提供了几种避免重复和提高效率的方法。今天,我们将探索可以用来优化我喜欢称之为“shell 时间”的工具。

Bash Trap 命令

  如果您编写过任何数量的 bash 代码,您可能已经遇到过 trap 命令。Trap 允许您捕获信号并在信号发生时执行代码。信号是异步通知,当某些事件发生时会发送到您的脚本。这些通知大多数是针对您希望永远不会发生的事件,例如无效的内存访问或错误的系统调用。但是,有一两个事件您可能确实想要处理。还有可用的“用户”事件,这些事件永远不会由系统生成,您可以生成这些事件来向您的脚本发出信号。Bash 还提供了一个名为“EXIT”的伪信号,它会在您的脚本退出时执行;这可以用来确保您的脚本在退出时执行一些清理操作。

Bash Shell 游戏:我们来玩钓鱼游戏!

如何开始开发流行纸牌游戏的计算机版本。在我之前在 Linux Journal 上写的 163 篇专栏文章以及我在编写《Wicked Cool Shell Scripts》这本书期间编程和探索的数十款游戏之间,我已经编写了很多 Bash shell 游戏。挑战在于找到一个足够简单,shell 脚本可以工作,但又不是太简单,以至于最终只有六行左右的游戏。

作业控制:您自认为不需要的 Bash 功能

世界上基本上有三种人:对 bash 作业控制知之甚少或一无所知的人,那些知道足够多以至于认为他们永远不会使用它的人,以及那些可以略读这篇文章其余部分的人。现在,别误会我的意思,我并不是说 bash 的作业控制会改变你的世界,但在一些简单的日常场景中,作业控制可能很有用,而且通常,它甚至可以消除“糟糕”的时刻。

这个 #! (Hash-Bang) Thingy 在我的 Bash 脚本中到底是什么 @#$%&! (Heck)

  您已经看过无数次了——脚本顶部的 hash-bang (#!) 行——无论是 Bash、Python、Perl 还是其他一些脚本语言。而且,我确信您知道它的目的是什么:它指定了用于执行脚本的脚本解释器。但是,您知道它实际上是如何工作的吗?您最初的想法可能是您的 shell (bash) 读取该行,然后执行指定的解释器,但这根本不是它的工作方式。它的实际工作方式是本文的重点,但我也想介绍一下,如果您愿意,如何创建您自己的“hash-bang”版本。

Bash 中的模式匹配

通配符已经存在很久了。有人甚至声称它们出现在古埃及象形文字中。通配符允许您简洁地指定与一组文件名匹配的模式(例如,*.pdf 以获取所有 PDF 文件的列表)。通配符也常被称为 glob 模式(或使用它们时,称为“globbing”)。但是 glob 模式的用途不仅仅是生成有用的文件名列表。bash 手册页将 glob 模式简单地称为“模式匹配”。首先,让我们快速回顾一下 bash 的 glob 模式。除了相当知名的简单通配符外,bash 还具有扩展的 globbing,它添加了其他功能。这些扩展功能通过 extglob 选项启用。

使用 Bash 进行防猫屏幕锁定

  我的卧室里有一台电脑。我也养了猫。不幸的是,猫和屏幕锁不太兼容,尤其是在晚上。准确地说,更多的是显示器电源管理的问题,而不是实际的屏幕锁定。以下是它的工作方式:我运行一个脚本来“晚上关灯”(即,锁定屏幕并强制显示器断电),这很好用,直到其中一只猫跳到桌子上并导致鼠标移动并重新打开显示器。而且猫甚至不必触摸鼠标;桌子的轻微移动就足以引起鼠标的反应。最近,我已经受够了,并认为必须有一种方法来禁用鼠标并“重构”脚本。

Bash 的内置 printf 函数

  即使您已经熟悉 printf 命令,如果您通过“man printf”获取了您的信息,您可能会错过 bash 内置的标准 printf(1) 命令提供的一些有用功能。

周末阅读:关于 Bash 的一切

Bash 是一种 shell 和命令语言。它作为大多数 Linux 发行版的默认登录 shell 广泛分发。我们为您整理了一些最受欢迎的 Bash 相关文章,供您周末阅读。  编写更紧凑的 Bash 代码 作者:Mitch Frazier 在大多数编程语言中,至少是非脚本语言中,您都希望避免未初始化的变量。在 bash 中,使用未初始化的变量通常可以简化您的代码。  

更多罗马数字和 Bash

在罗马时:完成罗马数字转换器脚本。在我的上一篇文章中,我开始深入研究一个经典的计算机科学难题:将罗马数字转换为阿拉伯数字。首先,更准确的说法应该是印度-阿拉伯数字,值得一提的是,它被认为是在公元一世纪到四世纪之间发明的——一个基于 0..9 值的计数系统。

删除重复的 PATH 条目:重启

  在我关于删除重复 PATH 条目的第一篇文章中,我使用了一个 AWK 单行命令。在第二篇文章中,我使用了一个 Perl 单行命令,或者更准确地说,我试图剖析读者 Shaun 提供的 Perl 单行命令。Shaun 问我,如果我愿意使用 AWK(而不是 Bash),为什么不使用 Perl 呢?我突然想到,有人也可能会问:为什么不直接使用 Bash 呢?所以,再次深入研究。

删除重复的 PATH 条目,第二部分:Perl 的崛起

  借用对阿诺德和终结者系列的歉意来作为标题,让我们再次看看从 PATH 变量中删除重复项。这种做法的灵感来自一位名为 Shaun 的读者在前一篇文章中发表的评论,他问道“如果您愿意使用非 bash 解决方案 (AWK) 来解决问题,为什么不使用 Perl 呢?” Shaun 非常好心地提供了一个 Perl 版本的代码,这很好,因为我很难想出一个。这是一小段代码,比 AWK 版本短,所以看起来应该很容易分解它。最后,我不确定我会称之为容易,但这很有趣,我认为其他非 Perl 程序员也可能会觉得它很有趣。

罗马数字和 Bash

复古编码罗马数字转换器的乐趣——我回到我的大学时代,重新解决我的家庭作业!我在计算机科学的黎明时期获得了计算机科学学士学位。好吧,也许没有那么久以前,但我们在课堂上确实谈到了 Ada 和 FORTRAN。然而,作为 UCSD 的校友,UCSD Pascal 是首选编程语言也就不足为奇了。别担心;我的教育经历中没有涉及穿孔卡片和纸带。

Bash 参数扩展的新功能

bash 手册页接近 4 万字。它不如《战争与和平》,但它可以在廉价小说书架上占有一席之地。鉴于 bash 文档的大小,在浏览手册页时很容易错过有用的功能。出于这个原因,以及为了寻找新功能,偶尔重新访问手册页可能是一件有用的事情。今天感兴趣的子部分是参数扩展——也就是 $var 的多种形式。不过,不要被这个名称所迷惑,它实际上是关于参数和变量扩展。

删除重复的 PATH 条目

这里的目标是从 PATH 变量中删除重复条目。但在我开始之前,让我们明确一点:没有令人信服的理由这样做。shell 本质上会忽略重复的 PATH 条目;只有一个路径的第一次出现才是重要的。两个动机推动了这项练习。第一个是查看一个最初看起来似乎没做什么的 awk 单行命令。第二个是为了满足那些对拥有重复 PATH 条目等事物感到恼火的人的需求。