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 脚本中到底是什么 @#$%&! (见鬼)

  您已经看过无数次了——脚本顶部的 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 相关文章供您周末阅读。  Mitch Frazier 撰写的编写更简洁的 Bash 代码 在大多数编程语言中,至少是非脚本语言中,您都希望避免未初始化的变量。在 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 条目等事情感到恼火的人的需求。