2022年6月

在本周为龙芯 CPU 架构支持进入 Linux 5.19 而进行的疯狂冲刺之后,Linus Torvalds 今天成功地将这个受 MIPS64 启发的中国架构代码合并到了 Linux 主线内核中。然而,由于一些代码尚未通过审查,虽然该 CPU 架构代码已经到位,但一些关键的驱动程序还没有到位,因此 Linux 5.19 还无法龙芯架构上启动。

如果你不太了解这件事的进展,我来补充介绍一下: 龙芯架构 LoongArch 是由龙芯公司开发的 CPU 架构,长期以来以其基于 MIPS64 的系统而为人所熟知。但是随着上游 MIPS64 架构已经实际消亡,龙芯公司开始开发他们自己的 ISA。龙芯架构自称受到了 MIPS64 和 RISC-V 的启发,但一些龙芯架构的内核代码实际上是重新使用或精密复制自现有的 MIPS 代码。

今年早些时候,龙芯架构被 添加到 GCC 12 中作为主要系统编译器。与其他 Arm 或 RISC-V 设计相比,目前这一代 龙芯 3A5000 CPU 的性能 在现今阶段并不太诱人。不过我们将拭目以待这个中国国产 CPU 架构在未来几年的发展情况。

正如本周早些时候所写的,有迫切的压力促使 龙芯架构进入 Linux 5.19,即使这意味着系统还无法启动。开发人员希望将 CPU 架构的代码主线化,这样他们就能腾出手来为 GNU C 库(Glibc)提交龙芯架构的支持代码。主线化他们的 Glibc 目标首先需要有一个坚实的用户空间 ABI 来解决内核支持。但由于 Glibc 2.38 预计在 8 月发布,龙芯架构需要合并到 Linux 5.19,以便有足够的时间在 7 月发布,才能使龙芯架构的代码赶得上 Glibc 的下一个版本截止线。

现在合并龙芯架构也减少了对 Linux 5.20 中可能出现的任何主线树范围变化的维护负担。

因此,大部分的龙芯架构代码已经出现在 Linux 5.19 中了,但缺少一些启动所需的 EFI 代码,IRQ 驱动与 Linux 的 MIPS 支持共享同一段代码,但由于情况复杂,还不能使用,PCI 部分的龙芯代码需要修改并通过 PCI 子系统区域进行合并。

龙芯架构的合并 对内核来说意味着增加了 21000 行的新代码,这还不包括尚未到达的所需驱动程序。据推测,到今年夏天晚些时候的 Linux 5.20 内核开发周期时,其余所需的驱动支持将会通过审查,从而产生一个可启动的龙芯架构系统。

就在四年前,著名的 Linux 内核开发者 Arnd Bergmann 预测 C-SKY 将是“我们最后一个添加到内核的新 CPU 架构”。C-SKY 是另一个中国架构,当时的想法是所有未来的 CPU 工作都将走向 RISC-V,但现在发现龙芯架构也许将是最后一个添加到 Linux 内核的新 CPU 架构。


via: https://www.phoronix.com/scan.php?page=news_item&px=LoongArch-Merged-Linux-5.19

作者: Michael Larabel 选题:wxy 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

GNOME Shell 在一台 Pinephone 原型机上运行

GNOME 开发人员在最近的一篇博文中提出了将 GNOME Shell 完全移植到手机上的想法。下面是我对这个项目的一些看法。

移动版 GNOME Shell

作为一个桌面环境,GNOME 在过去的十年中发展成为了 GNOME 40。GNOME 40 是一个重要的版本,它以一种现代的方式改变了完整的用户界面设计。

看着 GNOME 40 的设计方式,你可能会觉得 Shell 和它的底层技术已经为小屏幕做好了准备。手势驱动的工作区、图标网格和停靠区 —— 在某种程度上感觉更接近于像安卓这样的移动操作系统,而不是桌面环境。

此外,系统托盘、日历、通知和原生的应用程序,可以有效地在较小尺寸的设备上工作。得益于 GTK4 和 libadwaita,其设计是响应式的,应用程序和控件的外观与移动平台很匹配。

在 GNOME 40 之后,GNOME 开发者为较小尺寸的设备(如平板电脑和手机)设计了几个 GNOME Shell 的概念验证。

为什么是现在?

任何项目的开发和研究工作都要花费时间和金钱。虽然有来自主要科技公司对 GNOME 的捐赠,但这次有一个 “ 原型基金 Prototype Fund ” 帮助该团队继续进行这项努力。原型基金 是德国教育部(BMBF)支持公共利益软件的资助项目。

包括什么?

设计一个完整的移动用户界面,并将其与移动操作系统整合是一个非常复杂的项目。它需要一个精心设计的愿景来支持成千上万的移动硬件和用户支持。更不用说,用户在移动设备上的隐私和安全问题了。

因此,有了这个基金,团队可以集中精力进行概念验证,以满足 GNOME Shell 中一些基本的用户互动。

  • 启动器
  • 应用程序网格
  • 轻扫、手势和导航
  • 用手机键盘搜索
  • 检测屏幕大小和支持屏幕旋转
  • 工作空间和多任务
  • 设置
  • 屏幕键盘

GNOME Shell 移动版模拟图

始终要记住的是,移动体验远不止用户界面这么简单。另外,GNOME 本身并不是一个操作系统。它由底层的稳定的操作系统组成,它提供了非常需要的隐私和安全。另外,“应用商店”的概念也是如此。手机制造商需要与 GNOME 开发者合作,让他们的产品采用这个概念。

进展如何?

在写这篇文章时,团队给我们快速演示了取得的进展。在下面的视频中可以看到:

Phone

复杂的任务是识别触摸屏手机中的各种手势。例如,你可能会使用长触摸、短触摸、双指轻扫和拖动,以及许多只有在小尺寸设备中才可行的可能性。这需要在各自的 GNOME Shell 组件中推倒重构。

而完全在现有的 GNOME Shell 基础上开发它们是很有挑战性的工作。

此外,该团队使用著名的 Pinephone Pro 进行开发和测试。Pinephone 已经是一个商业产品,装有 “友商” KDE Plasma 手机和其他 Linux 操作系统。

Tablet

结语

如果一切按计划进行,我们可能在一个完整的开源手机中获得原生的 GNOME 体验。而你可以重新拥有你的隐私!

另外,我不确定 Phosh(它也是基于 GNOME 的)会发生什么。虽然 Phosh 是由 Purism 开发和管理的,但看看 GNOME Shell 在移动设备上的努力和 PHosh 在未来一段日子的发展方向将是很有趣的。

那么,你对这个项目的前景怎么看?请在下面的评论栏里告诉我。

图片和视频来源:GNOME 开发者 博客


via: https://www.debugpoint.com/2022/06/gnome-shell-mobile-announcement/

作者:Arindam 选题:lkxed 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

本教程概述了 Collision 的功能和使用指南。它是一个基于 GUI 且易于使用的程序,可让你使用加密哈希函数验证文件。

为什么需要验证文件?

人们每天都通过互联网下载文件。但许多用户从不费心去验证他们的完整性或真实性。这意味着不知道该文件是否合法且未被任何恶意代码篡改。

以作为标准安装镜像的 Linux 发行版 的 ISO 文件为例。所有流行的发行版制造商在 ISO 文件还提供哈希文件。使用该文件,你可以轻松比较下载文件的哈希值。让你可以放心你的文件是正确的并且没有以任何方式损坏。

此外,如果你通过不稳定的互联网连接下载大文件,该文件可能会损坏。在这些情况下,它也有需要验证。

Collision – 功能和使用方法

Collision 使用加密哈希函数来帮助你验证文件。加密哈希函数是一种流行的算法,它通过多种加密算法将文件数据生成为固定长度的数据流。最受欢迎的是 MD5、SHA-1、SHA-256 和 SHA-512。所有这些 Collision 都支持。

除此之外,Collision 还提供了一个简洁的用户界面,它对每个 Linux 用户都简单易用。这是它的外观。

Collision – First Screen

首先,它有两个主要特点。 a、上传文件以获取校验和和或哈希值;b、将校验和与上传的文件进行比较。

例如,如果你有一个简单的文件,你可以通过“ 打开文件 Open a File ”按钮上传一个文件,或“ 打开 Open ”按钮重新上传另一个文件。

如下图所示,该文本文件具有以下各种哈希函数的校验和。现在你可以通过互联网/与任何人共享该文件,以及用于验证的校验和值。

Hash values of a test file

此外,如果有人篡改文件(即使是单个字节)或文件在分发过程中被破坏,那么哈希值就会完全改变。

其次,如果要验证已下载文件的完整性,请点击“ 验证 Verify ”选项卡。然后上传文件,输入你收到的上传文件的哈希值。

如果匹配,你应该会看到一个绿色勾号,显示其真实性。

Collision verifies a sample file with SHA-256

此外,这是另一个示例,我修改了测试文件并保持大小相同。这个场景清楚地表明它对该文件无效。

Collision showing that a file is not valid

重要说明

这里值得一提的是,哈希方法不会验证文件元属性,如修改时间、修改日期等。如果有人篡改了文件并将其还原为原始内容,这种哈希方式将其称为有效文件。

现在,让我们看一个验证 ISO 文件的典型示例。

使用 Collision 验证 Ubuntu Linux 的示例 ISO 文件

我相信你在使用 Linux 时通常会下载许多 ISO 文件。为了说明,我从官方 Ubuntu 下载页面下载了流行的 Ubuntu ISO 服务器镜像。

Ubuntu server ISO file and checksums

SHA256SUMS 文件带有上面的该安装程序的以下校验和值:

SHA-256 value of Ubuntu server ISO image

下载后,打开 Collision 应用并通过“ 验证 Verify ”选项卡上传 ISO 文件。然后复制 SHA-256 值并将其粘贴到左侧的校验和框中。

如果你已正确下载并按照步骤操作,你应该会看到该文件是真实有效的。

Ubuntu server ISO image verified

如何安装 Collision

使用 Flatpak 可以轻松安装 Collision 应用。你需要为你的 Linux 发行版 设置 Flatpak,并单击以下链接以安装 Collision。

通过 Flathub 安装 Collision

安装后,你应该通过发行版的应用菜单找到它。

有没有其他方法可以在没有任何应用的情况下验证文件?

是的,所有 Linux 发行版中都有一些内置程序,你还可以使用它们来使用终端验证文件及其完整性。

下面的终端程序可用于确定任何文件的哈希值。它们默认安装在所有发行版中,你甚至可以将它们用于你的 shell 脚本以实现自动化。

md5sum <文件名>
sha1sum <文件名>
sha256sum <文件名>

使用上述程序,你可以找出哈希值。但是你需要比较它们以手动验证。

Verify files via command-line utilities

结束语

我希望本指南可以帮助你使用 Collision GTK 应用验证你的文件。它使用起来很简单。此外,你可以在终端中使用命令行方法来验证您想要的任何文件。尽可能始终检查文件完整性总是应该的。


via: https://www.debugpoint.com/2022/05/collision/

作者:Arindam 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

大新闻!老式 iPad 可能很快就能运行 Linux

爱好者们成功地在一台旧的 iPad Air 2 上启动了 Linux 内核 5.18,这对一台设计上从未运行过苹果以外的任何操作系统的设备来说,是一个重大的壮举。目前,开发者们只在一些使用 A7 和 A8 芯片的旧版 iPad 硬件上运行了 Linux,这包括 iPad Air、iPad Air 2 和几代 iPad mini。但随后他们暗示,将有可能让 Linux 在任何装有 A7 或 A8 的设备上运行,也就是说还包括 iPhone 5S 和最初的 HomePod 等设备。不过,目前开发工作仍处于早期阶段,只能进行基本的启动,连文件系统都不能挂载。

消息来源:Arstechnica
老王点评:这真是一个突破,可以让那些老旧得无法升级、没有支持的 iPad、iPhone 变成有趣的设备。

Firefox 推出一个本地运行的机器翻译插件

这个“Firefox 翻译”插件是一个能在本地运行的机器翻译工具,即翻译引擎、语言模型和页面内翻译算法都完全在用户计算机内运行,没有任何数据会发送到云端,因此完全保密。第一次翻译一种语言时,它需要下载一些支持性资源,以及改进的语言模型,但实际的翻译工作是在用户自己的电脑上执行基于机器学习的过程。

消息来源:Mozilla
老王点评:这个插件目前支持的语言并不多,由于是欧盟资助的项目,目前还不支持中文的翻译,也没看到支持中文的计划。

谷歌为开源项目推出新的芯片设计网站

谷歌一直在帮助小型开源项目进行芯片制造,谷歌承担费用,并与 SkyWater 合作,使用其开源的工艺设计套件来设计。谷歌今天宣布了一个新的芯片设计门户网站,其 MPW 穿梭计划允许任何人提交开源集成电路设计,并在利用这个开源的工艺设计套件和其他开源 EDA 工具的同时,免费制造这些芯片。而所采用的 130 纳米的芯片技术也被证明对类似物联网的硬件原型设计仍然有用。

消息来源:phoronix
老王点评:这才真是真正支持开源硬件,不知道国内什么时候能有这样的支持。

回音

  • NTFS3 驱动在贡献到上游后又失去维护引来社区关注后,其维护者又重返社区提交了一批贡献。

Linux Lite 6.0 是一个有趣的版本,有一个新的默认浏览器,改进了无障碍性、新的主题、新的系统监视器等等改进。

linux lite

Linux Lite,是 最好的类 Windows 发行版 之一,刚刚发布了它的最新版本 6.0。

Linux Lite 6.0 基于 Ubuntu 22.04 LTS,内置了 Linux 内核 5.15 LTS

这次升级包含了相当多的令人兴奋的新功能,包括一个新的窗口主题和无障碍技术。

让我们深入了解一下新的内容!

Linux Lite 6.0 概述

Linux Lite 6.0 包括许多变化,包括:

  • 更新了软件
  • 新的窗口主题
  • 新的屏幕键盘
  • 屏幕阅读器
  • 屏幕放大镜
  • Chrome 取代 Firefox 成为默认浏览器
  • 新的 GRUB 菜单

无障碍性的改进

Linux Lite 6.0

Linux Lite 通过这一改变已经步入了大联盟。无障碍性,在历史上一直是 GNOME 特有的优势,它现在有了很大的改进。这主要体现在三个不同的工具上:一个屏幕键盘,一个屏幕阅读器(Orca),和一个屏幕放大镜。

屏幕键盘对于许多触摸屏用户和没有键盘的用户来说是相当有用的。另一方面,屏幕阅读器对于视障用户来说将是完美的。

Linux Lite 6.0

最后一项无障碍改进屏幕放大镜,也是针对与屏幕阅读器相同的受众。然而,它与传统的桌面理念相当吻合,所以众多用户可能更青睐它,而不是屏幕阅读器。

这些无障碍性的改进有助于 Linux Lite 6.0 成为一个主流的选择。

更新的软件

与几乎所有的发行版升级一样,Linux Lite 6.0 包括更新的软件。最值得注意的是最新的 LibreOffice 稳定版 7.2.6。

其他更新包括 VLC 3.0.16、Thunderbird 91.7、Chrome 100、GIMP 2.10.30 等等。

虽然本身不一定是大规模的升级,但它表明了所包含的 LibreOffice 版本的重大变化。

以前,由于提供了更多的稳定性,Linux Lite 停留在更多老版本上。然而,Linux Lite 的开发者现在觉得使用最新的稳定版本也很放心,因为测试新 LibreOffice 版本的人比以往任何时候都多。

新的窗口主题

Linux Lite 6.0

Linux Lite 6.0 引入了一个新的窗口主题,叫做 “Materia”。那些主题社区的人可能会对它相当熟悉,因为它已经被移植到几乎所有的平台。这些平台包括 GTK 2、3 和 4、GNOME Shell、Budgie、Cinnamon、MATE、Unity、Xfce、LightDM、GDM,甚至是 Chrome 浏览器。

改用 Materia 应该会让 ChromeOS 用户感觉界面很熟悉,因为它是基于谷歌开发的 Material UI 的。

谷歌 Chrome 浏览器成为新的默认浏览器

Linux Lite 6.0

随着 Ubuntu 将其 Firefox 版本转移到一个 Snap 应用中,Linux Lite 已经完全抛弃了 Firefox,转而使用谷歌 Chrome。虽然我不能说我是这个变化的粉丝,但它确实有意义,特别是对于一个针对 Windows 用户的发行版来说。

虽然你可以自由地安装任何你喜欢的东西,但无论如何,Chrome 是大多数用户的流行选择。

此外,如果你想在访问文件之前扫描文件,Linux Lite 的开发者在 Chrome 中包含了一个 Virus Total 扫描器扩展(默认是禁用的)。

注意,你可以从 Linux Lite 的软件中心安装 Firefox,但它是 Snap 版本的。

系统监控中心替代了任务管理器

Linux Lite 6.0

Linux Lite 6.0 现在打包了 系统监控中心 System Monitoring Center 来替代任务管理器和进程查看器。

请注意,Linux Lite 的开发者复刻了这个应用程序,在系统标签中提供了关于发行版的具体信息。

它提供了所有关注你的资源的必要功能。

其他改进

除了基本的变化之外,Linux Lite 6.0 还包括对 GRUB 菜单的更新、推送紧急修复包的能力、新的 whisker 菜单,以及更多的调整。

Linux Lite 6.0

正如你所注意到的,新的 GRUB 菜单还包括关闭和重启,同时删除了内存测试选项。

你可以在其 官方公告帖子 中了解更多的技术细节。

总结

Linux Lite 6.0 看起来是一个可靠的版本,特别是对于那些等待无障碍功能和新的视觉感受的人。

如果你想自己尝试一下,ISO 文件可以从官方下载页面获得。

下载Linux Lite

via: https://news.itsfoss.com/linux-lite-6-0-release/

作者:Jacob Crume 选题:lkxed 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

编程语言往往具有许多共同特征。学习一门新语言的好方法是去写一个熟悉的程序。在本文中,我将会使用 Awk 编写一个“猜数字”程序来展示熟悉的概念。

当你学习一门新的编程语言时,最好把重点放在大多数编程语言都有的共同点上:

  • 变量 —— 存储信息的地方
  • 表达式 —— 计算的方法
  • 语句 —— 在程序中表示状态变化的方法

这些概念是大多是编程语言的基础。

一旦你理解了这些概念,你就可以开始把其他的弄清楚。例如,大多数语言都有由其设计所支持的“处理方式”,这些方式在不同语言之间可能有很大的不同。这些方法包括模块化(将相关功能分组在一起)、声明式与命令式、面向对象、低级与高级语法特性等等。许多程序员比较熟悉的是编程“仪式”,即,在处理问题之前设置场景所需花费的工作。据说 Java 编程语言有一个源于其设计的重要仪式要求,就是所有代码都在一个类中定义。

但从根本上讲,编程语言通常有相似之处。一旦你掌握了一种编程语言,就可以从学习另一种语言的基本知识开始,品味这种新语言的不同之处。

一个好方法是创建一组基本的测试程序。有了这些,就可以从这些相似之处开始学习。

你可以选择创建的一个测试程序是“猜数字”程序。电脑从 1 到 100 之间选择一个数字,让你猜这个数字。程序一直循环,直到你猜对为止。

“猜数字”程序练习了编程语言中的几个概念:

  • 变量
  • 输入
  • 输出
  • 条件判断
  • 循环

这是学习一门新的编程语言的一个很好的实践实验。

:本文改编自 Moshe Zadka 在 Julia 中使用这种方法和 Jim Hall在 Bash 中使用这种方法的文章。

在 awk 程序中猜数

让我们编写一个实现“猜数字”游戏的 Awk 程序。

Awk 是动态类型的,这是一种面向数据转换的脚本语言,并且对交互使用有着令人惊讶的良好支持。Awk 出现于 20 世纪 70 年代,最初是 Unix 操作系统的一部分。如果你不了解 Awk,但是喜欢电子表格,这就是一个你可以 去学习 Awk 的信号!

您可以通过编写一个“猜数字”游戏版本来开始对 Awk 的探索。

以下是我的实现(带有行号,以便我们可以查看一些特定功能):

     1    BEGIN {
     2        srand(42)
     3        randomNumber = int(rand() * 100) + 1
     4        print "random number is",randomNumber
     5        printf "guess a number between 1 and 100\n"
     6    }
     7    {
     8        guess = int($0)
     9        if (guess &lt; randomNumber) {
    10            printf "too low, try again:"
    11        } else if (guess &gt; randomNumber) {
    12            printf "too high, try again:"
    13        } else {
    14            printf "that's right\n"
    15            exit
    16        }
    17    }

我们可以立即看到 Awk 控制结构与 C 或 Java 的相似之处,但与 Python 不同。 在像 if-then-elsewhile 这样的语句中,thenelsewhile 部分接受一个语句或一组被 {} 包围的语句。然而,Awk 有一个很大的区别需要从一开始就了解:

根据设计,Awk 是围绕数据管道构建的。

这是什么意思呢?大多数 Awk 程序都是一些代码片段,它们接收一行输入,对数据做一些处理,然后将其写入输出。认识到这种转换管道的需要,Awk 默认情况下提供了所有的转换管道。让我们通过关于上面程序的一个基本问题来探索:“从控制台读取数据”的结构在哪里?

答案是——“内置的”。特别的,第 7-17 行告诉 Awk 如何处理被读取的每一行。在这种情况下,很容易看到第 1-6 行是在读取任何内容之前被执行的。

更具体地说,第 1 行上的 BEGIN 关键字是一种“模式”,在本例中,它指示 Awk 在读取任何数据之前,应该先执行 { ... }BEGIN 后面的内容。另一个类似的关键字 END,在这个程序中没有被使用,它指示 Awk 在读取完所有内容后要做什么。

回到第 7-17 行,我们看到它们创建了一个类似代码块 { ... } 的片段,但前面没有关键字。因为在 { 之前没有任何东西可以让 Awk 匹配,所以它将把这一行用于接收每一行输入。每一行的输入都将由用户输入作为猜测。

让我们看看正在执行的代码。首先,是在读取任何输入之前发生的序言部分。

在第 2 行,我们用数字 42 初始化随机数生成器(如果不提供参数,则使用系统时钟)。为什么要用 42?当然要选 42!#The_Hitchhiker's_Guide_to_the_Galaxy) 第 3 行计算 1 到 100 之间的随机数,第 4 行输出该随机数以供调试使用。第 5 行邀请用户猜一个数字。注意这一行使用的是 printf,而不是 print。和 C 语言一样,printf 的第一个参数是一个用于格式化输出的模板。

既然用户知道程序需要输入,她就可以在控制台上键入猜测。如前所述,Awk 将这种猜测提供给第 7-17 行的代码。第 18 行将输入记录转换为整数;$0 表示整个输入记录,而 $1 表示输入记录的第一个字段,$2 表示第二个字段,以此类推。是的,Awk 使用预定义的分隔符(默认为空格)将输入行分割为组成字段。第 9-15 行将猜测结果与随机数进行比较,打印适当的响应。如果猜对了,第 15 行就会从输入行处理管道中提前退出。

就这么简单!

考虑到 Awk 程序不同寻常的结构,代码片段会对特定的输入行配置做出反应,并处理数据,让我们看看另一种结构,看看过滤部分是如何工作的:

     1    BEGIN {
     2        srand(42)
     3        randomNumber = int(rand() * 100) + 1
     4        print "random number is",randomNumber
     5        printf "guess a number between 1 and 100\n"
     6    }
     7    int($0) &lt; randomNumber {
     8        printf "too low, try again: "
     9    }
    10    int($0) &gt; randomNumber {
    11        printf "too high, try again: "
    12    }
    13    int($0) == randomNumber {
    14        printf "that's right\n"
    15        exit
    16    }

第 1–6 行代码没有改变。但是现在我们看到第 7-9 行是当输入整数值小于随机数时执行的代码,第 10-12 行是当输入整数值大于随机数时执行的代码,第 13-16 行是两者相等时执行的代码。

这看起来“很酷但很奇怪” —— 例如,为什么我们会重复计算 int($0)?可以肯定的是,用这种方法来解决问题会很奇怪。但这些模式确实是分离条件处理的非常好的方式,因为它们可以使用正则表达式或 Awk 支持的任何其他结构。

为了完整起见,我们可以使用这些模式将普通的计算与只适用于特定环境的计算分离开来。下面是第三个版本:

     1    BEGIN {
     2        srand(42)
     3        randomNumber = int(rand() * 100) + 1
     4        print "random number is",randomNumber
     5        printf "guess a number between 1 and 100\n"
     6    }
     7    {
     8        guess = int($0)
     9    }
    10    guess &lt; randomNumber {
    11        printf "too low, try again: "
    12    }
    13    guess &gt; randomNumber {
    14        printf "too high, try again: "
    15    }
    16    guess == randomNumber {
    17        printf "that's right\n"
    18        exit
    19    }

认识到这一点,无论输入的是什么值,都需要将其转换为整数,因此我们创建了第 7-9 行来完成这一任务。现在第 10-12、13-15 和 16-19 行这三组代码,都是指已经定义好的变量 guess,而不是每次都对输入行进行转换。

让我们回到我们想要学习的东西列表:

  • 变量 —— 是的,Awk 有这些;我们可以推断出,输入数据以字符串形式输入,但在需要时可以转换为数值
  • 输入 —— Awk 只是通过它的“数据转换管道”的方式发送输入来读取数据
  • 输出 —— 我们已经使用了 Awk 的 printprintf 函数来将内容写入输出
  • 条件判断 —— 我们已经学习了 Awk 的 if-then-else 和对应特定输入行配置的输入过滤器
  • 循环 —— 嗯,想象一下!我们在这里不需要循环,这还是多亏了 Awk 采用的“数据转换管道”方法;循环“就这么发生了”。注意,用户可以通过向 Awk 发送一个文件结束信号(当使用 Linux 终端窗口时可通过快捷键 CTRL-D)来提前退出管道。

不需要循环来处理输入的重要性是非常值得的。Awk 能够长期保持存在的一个原因是 Awk 程序是紧凑的,而它们紧凑的一个原因是不需要从控制台或文件中读取的那些格式代码。

让我们运行下面这个程序:

$ awk -f guess.awk
random number is 25
guess a number between 1 and 100: 50
too high, try again: 30
too high, try again: 10
too low, try again: 25
that's right
$

我们没有涉及的一件事是注释。Awk 注释以 # 开头,以行尾结束。

总结

Awk 非常强大,这种“猜数字”游戏是入门的好方法。但这不应该是你探索 Awk 的终点。你可以看看 Awk 和 Gawk(GNU Awk)的历史,Gawk 是 Awk 的扩展版本,如果你在电脑上运行 Linux,可能会有这个。或者,从它的原始开发者那里阅读关于 最初版本 的各种信息。

你还可以 下载我们的备忘单 来帮你记录下你所学的一切。

Awk 备忘单

via: https://opensource.com/article/21/1/learn-awk

作者:Chris Hermansen 选题:lujun9972 译者:FYJNEVERFOLLOWS 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出