分类 技术 下的文章

本指南介绍了如何在没有互联网连接的情况下离线更新 Ubuntu 的步骤。

在很多情况下,你可能需要在没有互联网连接的情况下更新你的 Ubuntu 系统。你可能在外地不方便上网,也可能你需要更新一堆未联网的 Ubuntu,不管是哪种情况,保持你的系统更新最新的软件包总是需要的。

当然,始终建议通过联网来更新系统。

但有时,出于安全考虑,这是不行的。连接到互联网可能需要给你的系统进行额外的加固,以保护它们免受黑客和恶意软件的攻击。

以下的方法使用 apt-offline 来解决这些问题,并概述了在没有互联网的情况下离线更新 Ubuntu 的步骤。

准备环节

  • 一台能连接到网络的 Ubuntu(你朋友的、咖啡馆、实验室系统)
  • 存储了软件包的 U 盘
  • 两个系统都安装了 apt-offline:一个系统离线,另一个系统联网

安装 apt-offline

在两个系统下安装 apt-offline。你可以使用以下命令安装:

sudo apt install apt-offline

如果你想在离线的目标系统安装 apt-offline,你可以提前下载到 U 盘里,然后复制到目标系统,再使用下面的命令安装。

Ubuntu 22.04 LTS 和其他版本的下载链接如下所示。你可以选择一个镜像并下载 deb 文件。

下载 .deb 文件 – apt-offline
sudo dpkg -i name_of_package.deb

如何更新 Ubuntu

在离线的目标系统上打开终端,使用以下命令创建一个 .sig 签名文件:

sudo apt-offline set ~/offline-data.sig

创建签名文件

在这个刚创建的签名文件中,包含下载所需的软件包的路径和详细信息。

签名文件的内容

把签名文件复制到 U 盘中,再插到联网的 Ubuntu 系统上。

在联网的 Ubuntu 上创建一个目录(参见下面)来存放这些文件。

打开一个终端,运行以下命令来下载所需的软件包。记得根据你的系统,更改下载目录和 .sig 签名文件的路径。

apt-offline get -d ~/offline-data-dir offline-data.sig

下载软件包以离线安装

你可以看到文件相应下载,然后复制整个下载目录到 U 盘,再插到离线的 Ubuntu 系统。

运行以下命令将下载的软件包安装到离线系统,记得根据你的系统更改目录路径。

sudo apt-offline install offline-data-dir/

安装软件包

如果一切顺利,你将获得一个更新完的 Ubuntu。

重复以上步骤,就可以保持你的离线 Ubuntu 为最新版本。

希望以上教程能帮到你更新离线的 Ubuntu 系统,如果你遇到任何问题,请在下面的评论框中告诉我。


via: https://www.debugpoint.com/how-to-update-or-upgrade-ubuntu-offline-without-internet/

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

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

以下是如何在 Ubuntu 和其他 Linux 发行版中提高笔记本和桌面的音量的方法。

你有没有觉得你的 Ubuntu 笔记本的音量太小,尽管你把音量调到了 100%?我相信你有过。主要原因是:很明显,笔记本电脑的扬声器输出强度比大型扬声器要低。

此外,Ubuntu 和其他发行版将默认的最大音量设置为 100%,也就是 0dB(分贝)。0dB 是最大音量的参考值。做个比较,如果你把音量设置为 -10dB,这意味着你的音量比最大的 0dB 安静。

VLC 和一些媒体播放器允许你将音量提高到 200%。在最新的 Ubuntu 中使用一些设置,你可以将音量进一步提高。

注意:在你尝试和使用以下方法之前,请记住,每个扬声器都有其制造商设定的硬件限制。偶尔一次,播放超过 100% 的音频是可以的。但是,连续放大到更高的分贝可能会使输出的音频失真,并且从长远来看可能会损坏你的扬声器。因此,在使用时要小心谨慎,并有所限制。

在 Ubuntu 和其他发行版中提高扬声器音量

对于最新的 Ubuntu 22.04 及以上版本(GNOME)

从应用菜单中打开“ 设置 Settings ”,进入“ 声音 Sound ”标签。

启用 “ 过度放大 Over Amplification ” 开关。在你启用的那一刻,你应该看到音量条被扩大了。

在 Ubuntu 中提升音量超过 100%

现在你可以享受音量提升来听音乐了。

Fedora、Arch Linux 和其他发行版

如果你使用带有 GNOME 的 Fedora 工作站,你将看不到上述选项,因为这是 Ubuntu 特有的设置。见下面。

在 Fedora (GNOME)中,扬声器音量最大为 100%

因此,对于任何其他 Linux 发行版(Arch、Fedora、RedHat 等)或桌面(KDE、Xfce、LXQt 等),打开终端并安装 PulseAudio 音量控制器

Fedora、RedHat Linux、OpenSUSE 等基于 RPM 的发行版:

sudo dnf install pavucontrol

对于 Arch Linux、Manjaro:

sudo pacman -S pavucontrol

基于 Ubuntu 的非 GNOME 发行版:

sudo apt install pavucontrol

如何使用

安装后,从应用菜单中打开 pavucontrol,它应该有个 “PulseAudio Volume Control” 菜单项。

使用 PulseAudio 音量控制增加音量

总结

记住,上述方法可以提高整个系统的扬声器音量。这意味着系统的声音和警报也会受到影响。所以,要记住这一点。正如我前面提到的,如果连续使用,提升扬声器音量超过 100% 可能会导致扬声器变形或损坏。

我希望这个教程能帮助你提高系统音量。如果你遇到问题,请在评论栏里告诉我。


via: https://www.debugpoint.com/boost-speaker-volume-ubuntu/

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

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

Ubuntu 21.10 “Impish Indri” 及之后的版本将 Firefox Snap 设为默认浏览器。如果你不喜欢 Snap,可以通过以下方式将其删除并使用库存版本。

关于 Snap 是否是 APT 的更好替代品,一直存在争议。而许多用户更喜欢 Snap 系统,也有一些人非常讨厌它。Ubuntu 和 Canonical 认为它是 Linux 的最佳安装仓库和包管理工具之一。 Snap 被讨厌的主要原因是它的启动很慢。然而,这个论点是另一篇文章的内容。

从 Ubuntu 中删除 Firefox Snap 版本

所以,如果你还没有 听说过这件事,Ubuntu 21.10(和所有后续版本)默认提供 Firefox Snap 包。因此,当你从 Ubuntu 21.10 开始安装时,默认的左侧停靠区的快捷方式是 Firefox 的 Snap 版本。你可以使用以下各种方法对其进行验证。

snap 列表 - Firefox

Firefox snap 桌面快捷方式

如果你因为 性能 和存储问题而不喜欢 Snap,可以通过以下命令将其删除。

如果已经打开,那么关闭所有 Firefox 实例。

打开一个终端。然后运行以下命令:

sudo snap remove firefox

等待命令完成。这将从你的系统中删除它的 Snap 可执行文件,并断开 Firefox 与各种系统服务的连接。但是主目录下的 Snap 目录仍然存在。你可以使用以下命令手动删除它:

cd ~/snap
rm -r firefox

安装 Firefox 替代方法

现在,当你删除了 Firefox,你可以通过以下方式来使用此浏览器。

方法 1 – 使用 PPA(推荐)

在使用此方法之前,请确保如上删除了 Firefox 的 Snap 版本。

有一个 官方 Firefox PPA,由其开发团队维护。你可以将此 PPA 添加到你的软件源中,并使用它来安装最新的 Firefox。

确保使用文本编辑器创建一个首选项文件,以阻止 Ubuntu 在运行 apt update 命令时获取 Firefox 的 Snap 版本:

sudo gedit /etc/apt/preferences.d/firefox-no-snap

将以下行添加到上面的文件并保存:

Package: firefox*
Pin: release o=Ubuntu*
Pin-Priority: -1

依次使用以下命令。第一个命令将其从你的系统中完全清除它:

sudo apt purge firefox
sudo add-apt-repository ppa:mozillateam/firefox
sudo apt-get update
sudo apt install firefox

安装完成后,请确保使用以下命令启用自动升级:

echo 'Unattended-Upgrade::Allowed-Origins:: "LP-PPA-mozillateam:${distro_codename}";' | sudo tee /etc/apt/apt.conf.d/51unattended-upgrades-firefox

重启系统(可选)并使用 deb 版本的 Firefox。

方法 2 – 使用 Firefox 的压缩可执行文件

你可以从官方网站(链接如下)下载适用于 Ubuntu 和其他 Linux 的 Firefox 可执行文件压缩包。然后解压并双击运行 Firefox 可执行文件。这是最安全的方法。如果你使用此方法,你仍然可以获得更新。

下载 Firefox

下载 Firefox 并解压

然后运行可执行文件

方法 3 – 使用 Flatpak 版本的 Firefox

你也可以使用 Flatpak 版本的 Firefox,这在 Ubuntu 中设置 Flatpak 后可用。然后你可以运行以下命令进行安装:

flatpak install flathub org.mozilla.firefox

方法 4 – 使用与系统耦合更少的 Snap 版本 Firefox

如果你认为你仍然可以继续使用 Snap 版本,但希望在系统中减少沙盒化,那么你可能需要使用以下命令和 classic 开关 重新安装 Firefox:

sudo snap install firefox --classic

结束语

因此,这是从 Ubuntu 21.10 开始删除 firefox Snap 版本的步骤,以及一些替代方案。我很想知道 Linux Mint 采取了什么措施,因为他们不支持 Snap。此外,这些发行版依赖于 Firefox 的 Ubuntu 上游仓库,看看它们会做什么很有趣。Debian 维护自己的仓库,但主要是 ESR 版本。


via: https://www.debugpoint.com/remove-firefox-snap-ubuntu/

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

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

SoX Sound Exchange 甚至可以为你的音频文件添加特效。

 title=

我工作需要使用音视频媒体,不管你处理哪种媒体,你肯定知道标准化是一种有价值的工具。就像你不会试图把一个分数加到一个小数上而不转换其中一个一样,我已经知道,把不同格式的媒体组合起来并不理想。为了方便用户,大多数爱好者级应用程序使转换过程不可见。然而,对于那些需要控制媒体细节的用户的灵活软件,会通常让你自己提前将媒体转换为所需的格式。我有一些最喜欢的音频转换工具,其中之一就是号称“音频的瑞士军刀” —— SoX

安装

在 Linux 或 BSD 上,可以从软件存储库或 Ports 树中安装 sox 命令(,以及一些有用的符号链接)。

你也可以从 Sourceforge.net 上安装 SoX。它不经常发布,但它的代码库往往是稳定的,所以如果你想要最新的功能(如 Opus 支持),构建它是容易和安全的。

SoX 主要提供了 sox 命令,但是创建了一些有用的符号链接:playrecsoxi

使用 SoX 获取文件信息

SoX 可以读取和重写音频数据。它是否存储重写的音频数据取决于你。在有些情况下,你不需要存储转换后的数据,例如,当你将输出直接发送到扬声器进行回放时。然而,在进行任何转换之前,最好首先确定要处理的是什么。

使用 soxi 命令也可以收集音频文件信息。soxi 会符号链接到 soxi --info

$ soxi countdown.mp3
Input File(输入文件)    : '/home/tux/countdown.mp3'
Channels(通道数)       : 1
Sample Rate(采样率)    : 44100
Precision(数据精度)      : 16-bit(16 比特)
Duration(时长)       : 00:00:11.21 = 494185 samples...(11.21 秒 = 494185 采样点)
File Size(文件大小)      : 179k
Bit Rate(比特率)       : 128k
Sample Encoding(编码格式): MPEG audio (layer I, II or III)

这个输出可以让你很好地了解音频文件的编码方式、文件长度、文件大小、采样率和通道数。其中一些你可能认为你已经知道了,但当客户把媒体带到我面前时,我从不相信这些假设。使用 soxi 验证媒体属性。

转换文件

在本例中,,一个游戏节目倒计时的音频是以MP3文件的形式提供的。虽然几乎所有的编辑应用程序都接受压缩音频,但它们并不是在压缩的数据上进行编辑。转换是在某个地方发生的,可能是一个秘密的后台任务,也可能提示让你保存一份副本。我通常喜欢自己提前完成转换。这样,我可以控制使用的格式。我可以在夜间批量处理大量的媒体,而不是浪费宝贵的制作时间,等待编辑应用程序按需处理它们。

sox 命令用于转换音频文件。在 sox 流程中有几个阶段:

  • 输入
  • 合并
  • 特效
  • 输出

但在命令语法中,特效步骤令人困惑地放到了最后一步。这意味着 sox 流程是这样组成的:

输入 → 合并 → 输出 → 特效

编码

最简单的转换命令只涉及一个输入文件和一个输出文件。下面是转换 MP3 文件为无损 FLAC 文件的命令:

$ sox countdown.mp3 output.flac
$ soxi output.flac

Input File(输入文件)     : 'output.flac'
Channels(通道数)       : 1
Sample Rate(采样率)    : 44100
Precision(数据精度)      : 16-bit(16 比特)
Duration(时长)       : 00:00:11.18 = 493056 samples...(11.18 秒 = 493056 采样点)
File Size(文件大小)      : 545k
Bit Rate(比特率)       : 390k
Sample Encoding(编码格式): 16-bit FLAC
Comment(注释)        : 'Comment=Processed by SoX'

特效

特效可以在命令末尾指定。它可以在将数据发送到最终目的地之前更改音频。例如,有时声音太大会在转换过程中造成问题:

$ sox bad.wav bad.ogg
sox WARN sox: `bad.ogg' output clipped 126 samples; decrease volume?

应用增益gain)效果通常可以解决此问题:

$ sox bad.wav bad.ogg gain -1

淡入淡出

另一个常用的效果是淡入淡出fade)。此效果允许你定义淡入或淡出的类型,以及你希望淡入淡出效果持续的时间。

下面是一个使用倒抛物线的 6 秒淡入示例:

$ sox intro.ogg intro.flac fade p 6

这将对音频的头部应用 3 秒的淡入,并从 8 秒标记开始淡出(这段音乐只有 11 秒,因此在这种情况下淡出也是 3 秒):

$ sox intro.ogg intro.flac fade p 3 8

sox 手册页中列出了不同类型的淡入淡出(正弦、线性、倒抛物线等)以及淡入淡出提供的选项。

特效语法

每个特效插件都有自己的语法,因此请参阅手册页了解如何调用每个特效插件的详细信息。

效果可以在一个命令中以菊花链的方式进行,至少在你想组合它们的范围内是如此。换句话说,没有语法可以只在六秒钟的淡出期间应用一个镶边效果。对于如此精确的东西,你需要一个图形声波编辑器或数字音频工作站,例如 LMMSRosegarden。但是,如果你只想应用一次特效,可以在同一命令中将它们一起列出。

此命令应用了一个 -1 的增益效果、1.35 的节奏拉伸淡出

$ sox intro.ogg output.flac gain -1 stretch 1.35 fade p 0 6
$ soxi output.flac

Input File(输入文件)     : 'output.flac'
Channels(通道数)       : 1
Sample Rate(采样率)    : 44100
Precision(数据精度)      : 16-bit(16 比特)
Duration(时长)        : 00:00:15.10 = 665808 samples...(15.10 秒 = 665808 采样点)
File Size(文件大小)      : 712k
Bit Rate(比特率)       : 377k
Sample Encoding(编码格式): 16-bit FLAC
Comment(注释)        : 'Comment=Processed by SoX'

组合音频

SoX 还可以通过连接或混合音频文件来组合音频文件。

要连接(或者说拼接)文件合并为一个文件,请在命令中提供多个输入文件:

$ sox countdown.mp3 intro.ogg output.flac

在本例中,output.flac 现在包含 countdown.mp3 音频,紧接着是 intro.ogg 音乐。

但是,如果你希望两首曲目同时播放,可以使用 --combine mix 选项:

$ sox --combine mix countdown.mp3 intro.ogg output.flac

然而,想象一下,这两个输入文件的不同之处不仅仅在于它们的编解码器。人声音轨用单声道(一个声道)录制并不少见,但音乐至少要用立体声(至少两个声道)来录制。SoX 不会给出默认的解决方案,因此你必须首先自己标准化这两个文件的格式。

更改音频文件

选项与后面列出文件名有关。例如,此命令中的 --channels 选项将仅仅应用于 input.wav,而不被应用于 example.oggoutput.flac

$ sox --channels 2 input.wav example.ogg output.flac

这意味着在 SoX 中,选项的位置非常重要。如果你在命令开始时指定一个选项,那么实际上只会覆盖 SoX 自己从输入文件中收集的内容。然而,在输出文件名前的选项决定了 SoX 如何写入音频数据。

要解决前面的通道不兼容问题,你可以首先标准化输入,然后混合:

$ sox countdown.mp3 --channels 2 countdown-stereo.flac gain -1
$ soxi countdown-stereo.flac

Input File(输入文件)     : 'countdown-stereo.flac'
Channels(通道数)       : 2
Sample Rate(采样率)    : 44100
Precision(数据精度)      : 16-bit(16 比特)
Duration(时长)       : 00:00:11.18 = 493056 samples...(11.18 秒 = 493056 采样点)
File Size(文件大小)      : 545k
Bit Rate(比特率)       : 390k
Sample Encoding(编码格式): 16-bit FLAC
Comment(注释)        : 'Comment=Processed by SoX'

$ sox --combine mix \
  countdown-stereo.flac \
  intro.ogg \
  output.flac

SoX 绝对需要多个命令来执行复杂的操作,因此根据需要创建几个临时和中间文件是正常的。

多通道音频

当然,并非所有音频都被限制在一个或两个声道。如果你想将多个音频通道组合成一个文件,可以使用 SoX 的 --combine merge 选项:

$ sox --combine merge countdown.mp3 intro.ogg output.flac
$ soxi output.flac

Input File     : 'output.flac'
Channels       : 3
[...]

简单的音频操作

在没有视觉界面的情况下操作音频似乎很奇怪,而且对于某些任务来说,SoX 绝对不是最好的工具。然而,对于许多任务,SoX 提供了一个简单而轻量级的工具包。SoX 是一个具有强大潜力的简单命令。有了它,你可以转换音频,操纵通道和波形,甚至生成自己的声音。本文仅简要概述了其功能,因此请阅读其手册页或 在线文档,然后看看你能创造什么。


via: https://opensource.com/article/20/2/linux-sox

作者:Klaatu 选题:lujun9972 译者:FYJNEVERFOLLOWS 校对:wxy

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

本指南介绍了使用 GNOME Boxes 将虚拟机镜像移动到另一台主机所需的步骤。

GNOME Boxes 是由 GNOME 项目创建的虚拟化程序。此程序用作 libvirt 的前端。libvirt 是用于管理平台虚拟化的开源 API、守护进程和管理工具。它支持不同的虚拟化技术,如 KVM、Xen、VMware ESXi、QEMU 等。

如果你想使用 GNOME Boxes 创建虚拟机,请参阅本指南

在本教程中,我将解释如何将任何虚拟机镜像文件(已使用 GNOME Boxes 创建并运行)移动到不同的主机并运行它。

这样,你不再需要从操作系统重新安装虚拟机。此外,它是便携式的,你可以将虚拟机镜像放在 U 盘中。

如何使用 GNOME Boxes 将虚拟机镜像移动到另一台主机

我希望你已经在 GNOME Boxes 中创建了一个虚拟机。如果没有,请查看 本指南

GNOME Boxes 和 libvert 使用以下目录存储虚拟机镜像和配置。如下所述,你需要仔细备份每个文件。

GNOME Boxes 将虚拟机的物理镜像(通常为数 GB 大小)保存在以下路径中。对于你的每个虚拟机,你都会在其中找到一个镜像。

~/.local/share/gnome-boxes/images/

机器镜像

将图像文件复制到新主机的路径:~/.local/share/gnome-boxes/images/

将 libvirt 的 XML 配置从以下路径复制到新主机的相同位置。

~/.config/libvirt/qemu/

镜像 XML

在上述路径中,你应该会看到每个虚拟机的单独 xml 文件。复制你需要的那个。

在你当前的系统中打开以下文件。

~/.config/gnome-boxes/sources/'QEMU Session'

复制属于你的虚拟机的部分(从 [display ... 到本部分的末尾)。你可以使用名称轻松找到它(看下面的 last-seen-name)。

QEMU 会话文件

在另一台主机上打开相同的上述文件并将复制的内容附加到末尾。保存文件。

关闭新主机中的所有应用,包括 GNOME Boxes。

现在打开 GNOME Boxes,你应该会看到你的虚拟机和它的内容一起被移动到新主机中。

你现在可以拥有一个可以轻松携带和移动的便携式虚拟机。请记住,目标机器应该安装了 GNOME Boxes 才能完成这项工作。


via: https://www.debugpoint.com/move-virtual-machine-image-another-host/

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

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

Lua 是一个有趣而强大的语言,随着各个版本的推进,功能愈发的强大,开发者群体也在不断的增长。这篇文章我们将探索一下它的各种前景。

Lua 是一个脚本语言,它面向过程、函数式编程,甚至可以是 面向对象的。它使用类 C 语言的语法,但却是动态类型,具有自动内存管理和垃圾回收功能,使用基于寄存器的虚拟机来解释字节码。这些特点使得它对于初学者来说是个很好的语言,同时也是经验丰富的程序员的强大工具。

虽然与 PythonJavaScript 相比,Lua 现在已经有点儿黯然失色了,但是 Lua 拥有的一些优点使得它在许多的重大软件项目中很受欢迎。Lua 很容易嵌入到其他语言当中, 这意味着你可以在(例如)Java 编写的代码中包含 Lua 文件,就像原生的 Java 代码一样运行。这听起来就像魔法一般,现在有许多项目如 luaj 使得其成为可能,之所以可以实现,正是因为 Lua 就是为此而设计的。部分出于这种灵活性,你可以在许多游戏、图形应用的程序中发现 Lua 脚本的身影。

就像其他任何事情一样,做到完美是需要时间的,但 Lua 是很易于学习(并且有趣)的语言。它是一种一致的语言、一种带有有用的错误消息的友好的语言,并且可以在网上轻松找到许多有用的资料。那么就让我们开始吧!

安装 Lua

在 Linux 下,你可以使用发行版自带的包管理来安装 Lua。例如,在 Fedora、CentOS、 Mageia、OpenMandriva 以及类似发行版中:

$ sudo dnf install lua

在 Debian 以及基于 Debian 的系统中:

$ sudo apt install lua

对于 Mac,你可以使用 MacPorts 或者 Homebrew

$ sudo port install lua

对于 Windows,可以使用 Chocolatey 安装 Lua。

完成安装后,可以在终端中输入 lua 来在交互式解释器中使用 Lua。

函数

如许多编程语言一样,Lua 的语法通常是一个内建的函数或关键字,后面跟着参数。例如,print 函数显示你传给它的所有参数。

$ lua
Lua 5.4.2  Copyright (C) 1994-2020 Lua.org,PUC-Rio

> print('hello')
hello

Lua 的 string 库可以操作单词(在编程中称为“字符串”)。例如,要统计字符串中的字母数量,你可以使用 string 库中 len 函数:

> string.len('hello')
5

变量

变量允许你在计算机内存中为临时的数据创建一个指定的空间。Lua 中创建变量的方法是赋予变量一个名字,接着将数据放入其中。

> foo = "hello world"
> print(foo)
hello world
> bar = 1+2
> print(bar)
3

在编程中,数组的使用频率仅次于变量。“数组”这个词的字面意思就是一种排列,而这就是程序中数组的意义了。它是数据的一种排列,因为有排列,所有数组具有结构化的优势。本质上,数组通常用于和变量相同的目的,只不过数组会给对其中的数据进行排序。在 Lua 中,数组被称为“表”。(LCTT 译注:使用过其它编程语言的同学可以发现,Lua 的表相当于其它语言中的关联数组、哈希。)

创建表和创建变量类似,区别仅在于它的初始化内容被设置为 {}:

> mytable = {}

当往表中增加数据时,它就如同创建变量一样,区别在于这里的变量之前总是以表名开头,中间使用 . 来连接:

> mytable.foo = "hello world"
> mytable.bar = 1+2
> print(mytable.foo)
hello world
> print(mytable.bar)
3

使用 Lua 编写脚本

在终端交互环境中运行 Lua 可以得到良好的反馈,但是将 Lua 作为脚本运行会更为有用。Lua 脚本就是包含 Lua 代码的文本文件,Lua 命令可以解析并执行此文件。

在刚刚开始学习一门编程语言时,一个永恒的问题是你怎么知道该写什么。这篇文章将提供一个不错的开端,截至目前,你仅知道了两三个 Lua 函数。懂得查阅文档是很关键的。Lua 并不是一个复杂的语言,可以通过 Lua 文档网站 很方便的获取关键字以及函数的用法。

下面是一个练习题。

假设你想编写一个 Lua 脚本来统计句子中的单词数量。与众多的编程挑战一样,有许多方法可以解决这个问题,假设你在 Lua 文档中找到的第一个相关的函数是 string.gmatch,此函数可以搜索字符串中的特定字符。单词通常通过空格分隔开来,所以你决定计算空格数并加 1 来作为单词的数量。

下面是实现的代码:

function wc(words,delimiter)
  count=1
  for w in string.gmatch(words,delimiter) do
    count = count + 1
  end

  return count
end

下面是这个样例代码的解释:

  • function:这是声明函数开始的关键字。自定义函数的工作方式与内置函数(如 printstring.len)基本相同。
  • wordsdelimiter:这是函数运行所需的参数。正如 print('hello') 当中,hello 是一个参数。
  • counter:一个变量,且被初始化为 1
  • for:在循环中使用 string.gmatch 作为迭代器遍历 words,并且在其中搜索delimiter
  • count = count + 1:当搜索到了 delimiter,则对 count 进行自增 1 的操作。
  • endfor 循环的结束关键字。
  • return count:这个函数输出(或返回)count 变量的内容。
  • end:函数结束的关键字。

现在你已经创建了一个函数,你可以使用它。需要记住,函数不会自动运行,而是等待你在代码中调用它。

将下面的代码写入文件并保存为 words.lua

function wc(words,delimiter)
  count=1
  for w in string.gmatch(words,delimiter) do
    count = count + 1
  end
  return count
end

result = wc('zombie apocalypse',' ')
print(result)

result = wc('ice cream sandwich',' ')
print(result)

result = wc('can you find the bug? ',' ')
print(result)

你现在创建了一个 Lua 脚本。你可以使用 Lua 运行它。随后你会发现统计单词的结果有些问题:

$ lua ./words.lua
2
3
6

你也许已经注意到了最后一个句子的单词统计不正确,因为在句子的最后带有一个额外的空格。Lua正确的检测到了空格,并将其计入 count 中,但是单子的统计是错误的,因为有个空格并没有作为单词的分隔出现。我把这个问题留给你来解决,或者去发现其他方法,即使方法不太理想。编程中有很多需要思考的地方。有时是纯粹学术性的思考,有时也许是应用是否运训正常的思考。

学习 Lua

Lua 是一个有趣且强大的语言,随着版本的推进,功能愈发的强大,开发者群体也在不断的增长。你可以将 Lua 作为实用性的个人脚本使用,或者在工作中使用,或者仅仅是体验一下一个新的语言。尝试一下,看看 Lua 能给你带来什么吧。

(LCTT 译注:顺便问一句,你知道 “Lua” 怎么发音吗? ?)


via: https://opensource.com/article/22/11/lua-worth-learning

作者:Seth Kenlon 选题:lkxed 译者:MuggleWei 校对:wxy

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