2023年7月

7 月 23 日下午,由 Linux 中国主办,龙蜥社区联合主办,奇虎 360、图灵社区、Slash Data 支持的 LLUG 2023 上海场活动在上海市 360 大厦成功举办。

本次活动分为主题演讲和闪电演讲,来自技术社区、龙蜥社区和 Linux 中国的社区的分享者分享了自己的实践,现场的观众也在闪电演讲环节积极分享,大家热情交流。

现场爱好者听分享

腾讯云 TVP 肖力老师分享了他自己的成长路径,以及对于 Linux 新手们的建议,帮助大家理解云计算到底是什么以及如何更好的了解、使用云计算;龙蜥社区运营委员蔡佳丽则分享了龙蜥技术认证背后的设计理念和心得,并分享了目前龙蜥技术认证的具体情况;Linux 中国的技术组组长 Bestony 正式发布了 LCTT.Tools ,并进行了现场的演示,邀请更多社区爱好者参与并体验该工具。Linux 中国的创始人老王则远程分享了作为新手,如何更加高效的参与开源。

肖力老师的现场分享

龙蜥社区运营委员蔡佳丽分享龙蜥社区技术认证

老王分享如何高效的参与开源

除了主题演讲之外,来自现场爱好者的闪电演讲的分享,也赢得了满堂喝彩,胡张治同学分享了他自己从一个 Linux 小白逐渐成长为 ArchLinuxCN 的维护者的经历,并介绍他自己对于不同发行版的看法;来自大连的孙捂饭同学,则介绍了自己作为一个传统的运维工程师,对于 LLUG 线下活动的感想和体验;李轲韡介绍自己作为一个从事 Linux 发行版工作的软件公司,是如何看待 Anolis OS 的,帮助大家从一个从业者的视角,理解 Anolis OS 的价值;李伟光(a.k.a.地瓜)现场安利了一波 NeoVim,让大家知道了 Vim 的一个有趣的发行版。

胡张治分享自己从 GNU/Linux 小白到 ArchLinuxCN 贡献者的旅程

李伟光现场介绍 neovim 的使用

PPT 及视频下载

LLUG 的创办希望帮助 Linux 社区当中的每一个人都可以充分的交流经验和心得,所以我们也将本次活动的视频以及演示文稿开放出来,供大家查看。视频托管在 Bilibili,PPT 文稿则托管在 Github 的 Linux-CN/LLUG-Shares 仓库中,供大家下载。

本次活动的 PPT 及视频的汇总在这里,方便大家下载和在线查看。

类型活动主题主讲人PPT在线视频
主题演讲浅谈云计算架构设计肖力下载地址bilibili
主题演讲龙蜥技术认证介绍蔡佳丽下载地址bilibili
主题演讲高效开源(个人篇)wxy下载地址暂缺(准备重新录制),文字稿
主题演讲LCTT Tools Releasebestony下载地址bilibili
闪电演讲从 GNULinux 小白到 archlinuxcn 维护者胡张治bilibili
闪电演讲技术,以人为本。沟通,无处不在孙捂饭bilibili
闪电演讲Neovim的简单介绍李伟光bilibili
闪电演讲浅谈龙蜥系统在千寻的应用和思考李轲韡bilibili

关于深圳,你想聊点什么?

北京、上海,下一步,LLUG 将在 8 月份,来到鹏城深圳,和深圳的爱好者们,一起交流。如果你感兴趣,来到 LLUG 现场分享你和 Linux 的故事,欢迎扫描下方二维码,提交你的分享议题~

议题提交

(题图:MJ/2f6c9c25-86df-48c8-9268-7dd187cbe649)

GNOME 正在开发新的马赛克窗口管理系统

GNOME 希望能有更强大的窗口管理系统,除了经典的浮动堆叠模式和平铺模式外,他们设计了一种新的马赛克模式作为默认模式,它结合了平铺和浮动的优点。(不是你想的那个“马赛克”?)当你打开一个窗口,它就会以最适合应用程序的大小在屏幕中央打开。当你打开更多窗口时,现有的窗口会移到一边,为新窗口腾出空间。如果新窗口不合适,例如,因为它想最大化,它就会移动到自己的工作区。如果窗口布局接近填满屏幕,窗口就会自动平铺。但要想让每个人都满意新的窗口管理器,他们必须进行大量的用户研究,并测试无数种方案,可以想象,这可能需要数月甚至数年的时间。

消息来源:GNOME
老王点评:GNOME 和 KDE 不缺乏创新,并不只是抄袭 Windows 和 macOS,甚至反过来被抄袭。Linux 上的桌面环境缺乏的是精细打磨。

目前仍有 10,000 台大型机在使用

大型计算机通常被视为像恐龙一样古老的机器,但是,专门用于处理海量数据的大型机在今天仍然非常重要。据估计,目前仍在使用的大型机有一万台。世界上最大的公司几乎都在使用它们,其中包括三分之二的《财富》500 强公司。而这些大型机大多来自 IBM。今天的大型机可以拥有多达 240 个服务器级 CPU、40TB 的纠错 RAM 和多 PB 的冗余闪存二级存储。

消息来源:Ars Technica
老王点评:一方面,云计算并没有那么可靠,另外一方面,旧的信息基础设施很难迁移,或者说,不敢迁移。

抗量子加密技术还需要数年

能够破解公钥加密的量子计算机可能还需要几年时间。不幸的是,支持抗量子加密技术的产品也是如此。NIST 上周宣布的第二轮后量子算法评估预计将耗时数年,而 FIPS 产品验证流程也有后顾之忧。新标准一般需要 4 到 6 年的时间,供应商才能开发出执行该标准的专用集成电路,然后,供应商还需要时间来验证产品。由于现在窃取的加密数据可以在稍后解密,因此“现在收获,稍后解密”攻击的可能性“是一个已经存在的量子计算安全问题”。

消息来源:E-Security Planet
老王点评:如果不能在量子计算机真正发挥作用之前就部署好抗量子加密算法,那几乎可以肯定会面临大量的泄密事件,世界的真相也将更早揭晓。

Fedora Linux 提供了多个变体以满足你的需求。你可以在我之前的文章《Fedora Linux 的各种版本》中找到所有 Fedora Linux 变体的概述。本文将对 Fedora Linux 官方版本进行更详细的介绍。共有五个 版本 Edition : Fedora Workstation、Fedora Server、Fedora IoT、Fedora CoreOS 和 Fedora Silverblue。Fedora Linux 下载页面目前显示其中三个为 官方 版本,另外两个为 新兴 版本。本文将涵盖所有五个版本。

Fedora Workstation

如果你是笔记本电脑或台式计算机用户,则 Fedora Workstation 是适合你的操作系统。Fedora Workstation 非常易于使用。你可以用它满足日常工作、教育、爱好等需求。例如,你可以使用它创建文档,制作演示文稿,上网冲浪,处理图像,编辑视频等等。

这个 Fedora Linux 版本默认使用 GNOME 桌面环境。你可以使用这种环境舒适地工作和进行各种活动。你还可以根据个人喜好自定义 Fedora Workstation 的外观,让你在使用过程中更加舒适。如果你是 Fedora Workstation 的新用户,你可以阅读我之前的文章 在安装 Fedora Workstation 之后要做的事。通过该文章,你将更容易上手 Fedora Workstation。

更多信息请参阅以下链接:

Fedora Workstation

Fedora Server

许多公司需要自己的服务器来支持基础设施。Fedora Server 版操作系统配备了一个强大的基于 Web 的管理界面称为 Cockpit,具有现代化的外观。Cockpit 可以让你轻松查看和监控系统性能和状态。

Fedora Server 包含一些开源世界中的最新技术,并得到一个活跃的社区的支持。它非常稳定可靠。然而,并不保证 Fedora 社区中的任何人都能够在你遇到问题时提供帮助。如果你运行的是关键任务的应用程序,并且可能需要技术支持,你可能要考虑使用 Red Hat Enterprise Linux

更多信息请访问以下链接:

Fedora Server

Fedora IoT

为物联网设备专门设计的操作系统越来越受欢迎。Fedora IoT 就是为了应对这一需求而创建的操作系统。Fedora IoT 是一个不可变操作系统,使用 OSTree 技术来进行原子更新。该操作系统专注于物联网设备的安全性,这非常重要。Fedora IoT 支持多种架构。它还配备了一个基于 Web 的配置控制台,因此可以在不需要键盘、鼠标或监视器物理连接到设备的情况下进行远程配置。

更多信息请访问以下链接:

Fedora IoT

Fedora CoreOS

Fedora CoreOS 是一个面向容器的操作系统。该操作系统用于在任何环境中安全可靠地运行应用程序。它设计用于集群,但也可以作为独立系统运行。该操作系统与 Linux 容器配置具有高度兼容性。

更多信息请访问以下链接:

Fedora CoreOS

Fedora Silverblue

这个版本是 Fedora Workstation 的一个变体,界面并没有太大区别。但是,Fedora Silverblue 是一个不可变的操作系统,采用以容器为中心的工作流程。这意味着每个安装的副本与同一版本的其他副本完全相同。其目标是使其更加稳定,更少出现错误,并更容易进行测试和开发。

更多信息请访问以下链接:

Fedora Silverblue

结论

Fedora Linux 的每个版本都有不同的目的。多个版本的可用性可以帮助你获得适合你需求的操作系统。本文讨论的 Fedora Linux 版本是在 Fedora Linux 的主要下载页面上提供的操作系统。你可以在 https://getfedora.org/ 找到下载链接和更完整的文档说明。

(题图:MJ/90ffba71-aee2-4429-a846-41f06997792c)


via: https://fedoramagazine.org/fedora-linux-editions-part-1-official-editions/

作者:Arman Arisman 选题:lkxed 译者:ChatGPT 校对:wxy

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

本文章向你介绍了 Shell 脚本的基础知识以及其在日常生活中的重要性。

当我们登录到一个 UNIX/Linux 系统时,我们首先注意到的是闪烁的光标和 $ 符号之间的空格。这就是 Shell(交互界面)。多年来,它一直是一种无处不在(有时甚至是唯一的)与计算机交互的界面。在图形用户界面(GUI)出现和流行之前,终端和 Shell 是唯一的机制,可以让计算机按照我们的意图进行操作。乍一看,我们可能会想知道 Shell 的作用,除了将命令传递给底层操作系统以进行执行之外。我们中的大多数人熟悉像 ls(用于列出目录内容),cd(用于更改当前目录)等命令。通过 Shell,我们可以执行这些命令。Shell 理解我们输入的文本 - 将其转换为标记 - 然后在操作系统上执行这些标记。

不同的 Shell 变种

最初,终端使用了朴素的 Bourne Shell(即 Sh)。多年来,许多不同的 Shell 变种被开发出来和使用。其中一些流行的包括 C Shell(Csh) 和 Korn Shell(Ksh)。Sh 在一段时间内不再受欢迎,但通过其最新的化身 —— Bourne Again Shell(Bash),它再次流行起来。

Shell 实际上是做什么的?

Shell 是操作系统(OS)和用户之间的直接接口。通过使用命令和应用程序来使用计算机上安装的工具,我们可以使计算机按照我们的意愿工作。一些命令是安装在操作系统上的应用程序,而某些命令则是直接内置在 Shell 中的。在 Bash 中内置的一些命令包括 clearcdevalexec,还有 lsmkdir 这样的应用程序。内置在 Shell 中的命令因 Shell 而异。

在本文中,我们将涵盖与 Bash 相关的几个方面。

更多关于 Shell 的内容

我们中的大多数人都用过像 lscdmkdir 这样的命令。当我们在一个目录上运行 ls -l 命令时,该目录中的所有子目录和文件都会在屏幕上列出。如果数量很大,屏幕会滚动。如果终端不支持滚动条(在很多年里都是如此),则无法查看已滚动过的条目。为了克服这个问题,我们使用像 moreless 这样的命令。它们允许我们逐页查看输出。通常使用的命令是:

ls -l | less

在这里 Shell 是在做什么?看起来像是单个命令,实际上是 lsless 两个命令依次执行。管道符(|)将这两个程序连接起来,但连接由 Shell 管理。由于有了管道符,Shell 连接了这两个程序——它将 ls 命令的标准输出连接到 less 的标准输入(stdin)。管道功能使我们能够将任何程序的输出作为另一个程序的输入提供,而无需对程序进行任何更改。这是许多 UNIX/Linux 应用程序的理念——保持应用程序简单,然后将许多应用程序组合在一起以实现最终结果,而不是让一个程序做很多事情。

如果需要,我们可以将 ls 的输出重定向到文件中,然后使用 vi 查看它。为此,我们使用以下命令:

ls -l > /tmp/my_file.txt
vi /tmp/my_file.txt

在这种情况下,ls 的输出被重定向到一个文件中。这由 Shell 进行管理,它理解 > 符号表示重定向。它将其后面的标记视为文件。

使用 Shell 自动化

结合命令的能力是使用 Shell 命令创建自动化脚本的关键要素之一。在我最近的项目中,我们使用集群模式执行 Python/Spark(PySpark)应用程序。每个应用程序执行了许多结构化查询语言(SQL)语句 - SparkSQL。为了跟踪应用程序的进展,我们会打印有关正在执行的 SQL 的详细信息。这样可以让我们保留应用程序中正在发生的情况的日志。由于应用程序在集群模式下执行,要查看日志,我们必须使用以下 yarn 命令:

yarn log –applicationId [application_id]

在大多数情况下,应用程序生成的日志非常大。因此,我们通常将日志导入到 less 中,或将其重定向到一个文件中。我们使用的命令是:

yarn log –aplicationId [application_id] | less

我们的开发团队有 40 人。每个人都必须记住这个命令。为了简化操作,我将这个命令转换成了一个 Bash 脚本。为此,我创建了一个以 .sh 为扩展名的文件。在 UNIX 和 Linux 系统上,文件扩展名并不重要。只要文件是可执行的,它就能工作。扩展名在 MS Windows 上有意义。

需要记住的重要事项

Shell 是一个解释器。这意味着它会逐行读取程序并执行它。这种方法的限制在于错误(如果有)在事先无法被识别。直到解释器读取和执行它们时,错误才会被识别出来。简而言之,假如我们有一个在前 20 行完美执行,但在第 21 行由于语法错误而失败的 Shell 程序。当脚本在第 21 行失败时,Shell 不会回滚/撤销之前的步骤。当发生这样的情况时,我们必须纠正脚本并从第一行开始执行。因此,例如,如果在遇到错误之前删除了几个文件,脚本的执行将停止,而文件将永远消失。

我创建的脚本是:

#!/bin/bash
yarn log –applicationId 123 | less

…其中 123 是应用程序的 ID。

第一行的前两个字符是特殊字符(“释伴”)。它们告诉脚本这是一个可执行文件,并且该行包含要用于执行的程序的名称。脚本的其余行传递给所提到的程序。在这个例子中,我们将执行 Bash。即使包含了第一行,我们仍然必须使用以下命令对文件应用执行权限:

chmod +x my_file.sh

在给文件设置了执行权限之后,我们可以如下执行它:

./my_file.sh

如果我们没有给文件设置执行权限,我们可以使用以下命令执行该脚本:

sh ./my_file.sh

传递参数

你很快就会意识到,这样的脚本很方便,但立即变得无用。每次执行 Python/Spark 应用程序时,都会生成一个新的 ID。因此,对于每次运行,我们都必须编辑文件并添加新的应用程序 ID。这无疑降低了脚本的可用性。为了提高其可用性,我们应该将应用程序 ID 作为参数传递:

#!/bin/bash
yarn –log -applicationId ${1} | less

我们需要这样执行脚本:

./show_log.sh 123

脚本将执行 yarn 命令,获取应用程序的日志并允许我们查看它。

如果我们想将输出重定向到一个文件中怎么办?没问题。我们可以将输出重定向到一个文件而不是发送给 less

#!/bin/bash
ls –l ${1} > ${2}
view ${2}

要运行脚本,我们需要提供两个参数,命令变为:

./my_file.sh /tmp /tmp/listing.txt

当执行时,$1 将绑定到 /tmp$2 将绑定到 /tmp/listing.txt。对于 Shell,参数从一到九命名。这并不意味着我们不能将超过九个参数传递给脚本。我们可以,但这是另一篇文章的主题。你会注意到,我将参数命名为 ${1}${2},而不是 $1$2。将参数名称封闭在花括号中是一个好习惯,因为它使我们能够无歧义地将参数作为较长变量的一部分组合起来。例如,我们可以要求用户将文件名作为参数,并使用它来形成一个更大的文件名。例如,我们可以将 $1 作为参数,创建一个新的文件名为 ${1}_student_names.txt

使脚本更健壮

如果用户忘记提供参数怎么办?Shell 允许我们检查这种情况。我们将脚本修改如下:

#!/bin/bash
if [ -z "${2}" ]; then
  echo "file name not provided"
  exit 1
fi
if [ -z "${1}" ]; then
  echo "directory name not provided"
  exit 1
fi
DIR_NAME=${1}
FILE_NAME=${2}
ls -l ${DIR_NAME} > /tmp/${FILE_NAME}
view /tmp/${FILE_NAME}

在这个程序中,我们检查是否传递了正确的参数。如果未传递参数,我们将退出脚本。你会注意到,我以相反的顺序检查参数。如果我们在检查第一个参数存在之前检查第二个参数的存在,如果只传递了一个参数,脚本将进行到下一步。虽然可以按递增顺序检查参数的存在,但我最近意识到,从九到一检查会更好,因为我们可以提供适当的错误消息。你还会注意到,参数已分配给变量。参数一到九是位置参数。将位置参数分配给具名参数可以在出现问题时更容易调试脚本。

自动化备份

我自动化的另一个任务是备份。在开发的初期阶段,我们没有使用版本控制系统。但我们需要有一个机制来定期备份。因此,最好的方法是编写一个 Shell 脚本,在执行时将所有代码文件复制到一个单独的目录中,将它们压缩,并使用日期和时间作为后缀来上传到 HDFS。我知道,这种方法不如使用版本控制系统那样清晰,因为我们存储了完整的文件,查找差异仍然需要使用像 diff 这样的程序;但它总比没有好。尽管我们最终没有删除代码文件,但团队确实删除了存储助手脚本的 bin 目录!!!而且对于这个目录,我没有备份。我别无选择,只能重新创建所有的脚本。

一旦建立了源代码控制系统,我很容易将备份脚本扩展到除了之前上传到 HDFS 的方法之外,还可以将文件上传到版本控制系统。

总结

如今,像 Python、Spark、Scala 和 Java 这样的编程语言很受欢迎,因为它们用于开发与人工智能和机器学习相关的应用程序。尽管与 Shell 相比,这些语言更强大,但“不起眼”的 Shell 提供了一个即用即得的平台,让我们能够创建辅助脚本来简化我们的日常任务。Shell 是相当强大的,尤其是因为我们可以结合操作系统上安装的所有应用程序的功能。正如我在我的项目中发现的那样,即使经过了几十年,Shell 脚本仍然非常强大。我希望我已经说服你尝试一下了。

最后一个例子

Shell 脚本确实非常方便。考虑以下命令:

spark3-submit --queue pyspark --conf "[email protected]" --conf "spark.yarn.keytab=/keytabs/abcd.keytab" --jars /opt/custom_jars/abcd_1.jar --deploy-mode cluster --master yarn $*

我们要求在执行 Python/Spark 应用程序时使用此命令。现在想象一下,这个命令必须每天被一个由 40 个人组成的团队多次使用。大多数人会在记事本中复制这个命令,每次需要使用时,会将其从记事本中复制并粘贴到终端中。如果复制粘贴过程中出现错误怎么办?如果有人错误使用了参数怎么办?我们如何调试使用的是哪个命令?查看历史记录并没有太多帮助。

为了让团队能够简单地执行 Python/Spark 应用程序,我们可以创建一个 Bash Shell 脚本,如下所示:

#!/bin/bash
[email protected]
KEYTAB_PATH=/keytabs/abcd.keytab
MY_JARS=/opt/custom_jars/abcd_1.jar
MAX_RETRIES=128
QUEUE=pyspark
MASTER=yarn
MODE=cluster

spark3-submit --queue ${QUEUE} --conf "spark.yarn.principal=${SERVICE_PRINCIPAL}" --conf "spark.yarn.keytab=${KEYTAB_PATH}" --jars ${MY_JARS} --deploy-mode ${MODE} --master ${MASTER} $*

这展示了一个 Shell 脚本的强大之处,让我们的生活变得简单。根据你的需求,你可以尝试更多的命令和脚本,并进一步探索。

(题图:MJ/f32880e8-0cdc-4897-8a1c-242c131111bf)


via: https://www.opensourceforu.com/2022/05/shell-scripting-is-still-going-strong/

作者:Bipin Patwardhan 选题:lkxed 译者:ChatGPT 校对:wxy

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

FSF 指谷歌在 WEI 上的做法是“邪恶先锋”

自由软件基金会(FSF)的 Greg Farough 批评谷歌提出的网络环境完整性(WEI)是对自由互联网的全面攻击。称该政策文件所强调的使用案例与其真正的使用案例相比,简直是小巫见大巫,因为其真正的使用案例是制定一种方法来完全彻底地限制互联网的自由。借助 WEI,政府将可以利用它来确保只有其官方 “批准”(读作:后门)的浏览器才能访问互联网;Netflix 等公司将利用它来推进数字限制管理(DRM);谷歌将利用它来拒绝用户访问其服务,除非用户使用的浏览器符合其利润率。最初 WEI 还只是发布在 GitHub 上的一份无伤大雅的 政策文件,但谷歌现在已将其快速发展到 Chromium 浏览器中,WEI 将很快就会出现在我们面前。他说,“曾经有段时间谷歌的理念是‘不作恶’,它如此短时间内就在 WEI 上取得进展,我们可以非常肯定地说,他们现在的政策是要成为邪恶先锋。”

消息来源:FSF
老王点评:很多人没太理解 WEI 的危害,而这篇文章清晰的分析了其潜在的危害。但是,这种程度的社区抗议恐怕无济于事。谷歌比较忌惮的是其它企业和政府对它的反对。除了支持 Firefox 这类自由的浏览器之外,我们还可以寄希望于在其它的 Chromium 下游版本中去除 WEI。

AlmaLinux 向红帽示好,被拒绝了

红帽关闭 CentOS,推行 CentOS Stream 成为 RHEL 上游,其中一个理由是希望社区来参与 CentOS Stream/RHEL 的开发,并指责 AlmaLinux 等 RHEL 克隆品只是简单的重建,而没有做出任何贡献。而 AlamLinux 一方面表示将不再寻求 1:1 克隆,将在 RHEL 之外合并补丁,另外一方面“也尝试在 CentOS Stream 中测试和复制问题”,以示好红帽。最近,AlmaLinux 提交了一个 Iperf3 的 CVE 修复到 CentOS Stream。但红帽公司的一位高级软件工程师回复说:“感谢您的贡献。目前,我们不打算在 RHEL 中解决这个问题,不过我们会根据客户需求继续评估。”AlamLinux 不理解“只需合并即可,为什么还要拒绝修复呢?”之前曾经称 AlmaLinux 等“只是简单地重建代码”的红帽公司核心平台(又名 RHEL)副总裁 Mike McGrath 对 AlmaLinux 表示了感谢,但拒绝了这些代码。事后,McGrath 承认错失了对 AlmaLinux 表达善意的机会,并提升了该 CVE 的等级,合并了这些代码。

消息来源:ZDNet
老王点评:只是说说而已,谁让你真提交代码了,没事就给添乱,你知道你提交了代码,红帽要做作多少回归测试吗。

Python 接受可选全局解释器锁提案

Python 指导委员会宣布,它计划接受 PEP 703,让全局解释器锁成为可选,即 No-GIL 模式。预计将在 Python 3.13 初步支持该模式。CPython 的全局解释器锁(GIL)阻止了同时多线程执行代码,成为了在多核 CPU 上提高 Python 代码运行效率的一大障碍。Meta 公司承诺为 PEP 703 提案提供 人力支持。Python 指导委员会强调了兼容性的重要性,要避免出现类似 Python 3 的情况,称它不是 Python 4。

消息来源:Python 基金会
老王点评:不是 Python 4,胜似 Python 4,这一改进对将 Python 应用到重要领域很有意义。

在大多数编程语言中,你都会找到字符串数据类型。字符串基本上是一组字符。

但 Bash Shell 有所不同。字符串没有单独的数据类型。这里一切都是变量。

但这并不意味着你不能像在 C 和其他编程语言中那样处理字符串。

在 Bash Shell 中可以查找子字符串、替换子字符串、连接字符串以及更多字符串操作。

在 Bash 基础知识系列的这一部分中,你将学习基本的字符串操作。

在 Bash 中获取字符串长度

让我们从最简单的选项开始。也就是获取字符串的长度。这很简单:

${#string}

让我们在示例中使用它。

Example of getting string length in bash

正如你所看到的,第二个示例中有两个单词,但由于它用引号引起来,因此它被视为单个单词。连空格都算作一个字符。

在 Bash 中连接字符串

用技术术语来说是字符串 连接 concatenation ,这是 Bash 中最简单的字符串操作之一。

你只需像这样一个接一个地使用字符串变量:

str3=$str1$str2

还能比这更简单吗?我觉得不能。

让我们看一个例子。这是我的示例脚本,名为 join.sh

#!/bin/bash

read -p "Enter first string: " str1
read -p "Enter second string: " str2

joined=$str1$str2

echo "The joined string is: $joined"

以下是该脚本的运行示例:

Join two strings in bash

在 Bash 中提取子字符串

假设你有一个包含多个字符的大字符串,并且你想要提取其中的一部分。

要提取子字符串,需要指定主字符串、子字符串的起始位置和子字符串的长度,如下所示:

${string:$pos:$len}
? 和数组一样,字符串中的定位也是从 0 开始。

这是一个例子:

Extracting substring in bash

即使你指定的子字符串长度大于字符串长度,它也只会到达字符串末尾。

替换 Bash 中的子字符串

假设你有一个大字符串,并且你想用另一个字符串替换其中的一部分。

在这种情况下,你可以使用这种语法:

${string/substr1/substr2}
✋ 只有第一次出现的子字符串才会以这种方式替换。如果要替换所有出现的地方,请使用 ${string//substr1/substr2}

这是一个例子:

Replace substring in bash

正如你在上面看到的,“good” 一词被替换为 “best”。我将替换的字符串保存到同一字符串中以更改原始字符串。

? 如果未找到子字符串,则不会替换任何内容。它不会导致错误。

在 Bash 中删除子字符串

我们来谈谈删除子字符串。假设你要删除字符串的一部分。在这种情况下,只需将子字符串提供给主字符串,如下所示:

${string/substring}
✋ 通过这种方式,仅删除第一次出现的子字符串。如果要删除所有出现的内容,请使用 ${string//substr}

如果找到子字符串,则将从字符串中删除它。

让我们通过一个例子来看看。

Delete substring in bash

不用说,如果没有找到子字符串,则不会删除它。它不会导致错误。

?️ 练习时间

现在是你通过简单练习来实践字符串操作的时候了。

练习 1:声明一个字符串 “I am all wet”。现在通过用 “set” 替换单词 “wet” 来更改此字符串。

练习 2:创建一个字符串,以 112-123-1234 格式保存电话号码。现在,你必须删除所有 -

这应该会给你一些在 Bash 中使用字符串的不错的练习。在下一章中,你将学习如何在 Bash 中使用 if-else 语句。敬请关注。

(题图:MJ/aa73b2c9-6d2f-42e2-972d-94fab56d30cc)


via: https://itsfoss.com/bash-strings/

作者:Abhishek Prakash 选题:lkxed 译者:geekpi 校对:wxy

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