基本字符串操作

ShellShellBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习 shell 脚本中的基本字符串操作。字符串操作在各种脚本任务中对于处理和提取文本数据至关重要。你将探索诸如确定字符串长度、查找字符位置、提取子字符串以及替换字符串部分等概念。这些技能对于在 shell 脚本中进行有效的文本处理至关重要。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) shell(("Shell")) -.-> shell/VariableHandlingGroup(["Variable Handling"]) shell(("Shell")) -.-> shell/AdvancedScriptingConceptsGroup(["Advanced Scripting Concepts"]) shell(("Shell")) -.-> shell/BasicSyntaxandStructureGroup(["Basic Syntax and Structure"]) shell/BasicSyntaxandStructureGroup -.-> shell/shebang("Shebang") shell/BasicSyntaxandStructureGroup -.-> shell/comments("Comments") shell/BasicSyntaxandStructureGroup -.-> shell/quoting("Quoting Mechanisms") shell/VariableHandlingGroup -.-> shell/variables_decl("Variable Declaration") shell/VariableHandlingGroup -.-> shell/variables_usage("Variable Usage") shell/VariableHandlingGroup -.-> shell/str_manipulation("String Manipulation") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") shell/VariableHandlingGroup -.-> shell/param_expansion("Parameter Expansion") shell/AdvancedScriptingConceptsGroup -.-> shell/cmd_substitution("Command Substitution") subgraph Lab Skills shell/shebang -.-> lab-388814{{"基本字符串操作"}} shell/comments -.-> lab-388814{{"基本字符串操作"}} shell/quoting -.-> lab-388814{{"基本字符串操作"}} shell/variables_decl -.-> lab-388814{{"基本字符串操作"}} shell/variables_usage -.-> lab-388814{{"基本字符串操作"}} shell/str_manipulation -.-> lab-388814{{"基本字符串操作"}} linux/touch -.-> lab-388814{{"基本字符串操作"}} shell/param_expansion -.-> lab-388814{{"基本字符串操作"}} shell/cmd_substitution -.-> lab-388814{{"基本字符串操作"}} end

创建脚本文件

让我们从创建一个脚本文件开始,我们将在其中编写字符串操作。

  1. 在 WebIDE 中打开终端。终端是你输入命令与 Linux 系统交互的地方。

  2. 导航到项目目录:

    cd ~/project

    这条命令将你的当前目录更改为 ~/project~ 符号代表你的主目录,因此 ~/project 是主目录中名为 "project" 的文件夹。

  3. 创建一个名为 string_operations.sh 的新文件:

    touch string_operations.sh

    touch 命令会创建一个新的空文件。如果文件已经存在,它会更新文件的时间戳。

  4. 在 WebIDE 编辑器中打开该文件。你可以通过点击 WebIDE 左侧文件资源管理器中的文件名来完成此操作。

  5. 在文件顶部添加以下 shebang 行以指定解释器:

    #!/bin/bash

    这行被称为 "shebang" 的代码告诉系统使用 Bash shell 来解释此脚本。它始终是 shell 脚本的第一行。

字符串长度

现在,让我们学习如何确定字符串的长度。

  1. 将以下代码添加到你的 string_operations.sh 文件中:

    echo "Step 2: String Length"
    
    STRING="Hello, World!"
    LENGTH=${#STRING}
    
    echo "The string is: $STRING"
    echo "Its length is: $LENGTH"

    让我们分解一下这段代码:

    • 我们定义了一个变量 STRING,并将其赋值为 "Hello, World!"。
    • ${#STRING} 是一种特殊语法,用于计算存储在 STRING 变量中的字符串的长度。
    • 我们将这个长度存储在 LENGTH 变量中。
    • 最后,我们打印出字符串及其长度。
  2. 保存文件。在大多数编辑器中,你可以通过按 Ctrl+S(或在 Mac 上按 Cmd+S)来完成此操作。

  3. 使脚本可执行:

    chmod +x string_operations.sh

    这条命令会更改文件的权限,使其可执行。chmod 代表 "change mode"(更改模式),而 +x 表示 "添加执行权限"。

  4. 运行脚本:

    ./string_operations.sh

    ./ 告诉 shell 在当前目录中查找脚本。

你应该会看到类似以下的输出:

Step 2: String Length
The string is: Hello, World!
Its length is: 13

如果你没有看到此输出,请仔细检查是否已保存文件并使其可执行。

查找字符位置

接下来,我们将学习如何查找字符串中某个字符的位置。

  1. 将以下代码添加到你的 string_operations.sh 文件中:

    echo -e "\nStep 3: Finding Character Position"
    
    STRING="abcdefghijklmnopqrstuvwxyz"
    CHAR="j"
    
    POSITION=$(expr index "$STRING" "$CHAR")
    
    echo "The string is: $STRING"
    echo "We're looking for the character: $CHAR"
    echo "It is at position: $POSITION"

    这段代码的作用如下:

    • 我们定义了一个包含字母表的 STRING 变量。
    • 我们定义了一个 CHAR 变量,其中包含我们要查找的字符。
    • expr index "$STRING" "$CHAR" 是一个命令,用于查找 $CHAR$STRING 中的位置。
    • 我们使用 $() 捕获此命令的输出,并将其存储在 POSITION 变量中。
    • 最后,我们打印出结果。
  2. 保存文件并再次运行脚本:

    ./string_operations.sh

你应该会看到类似以下的额外输出:

Step 3: Finding Character Position
The string is: abcdefghijklmnopqrstuvwxyz
We're looking for the character: j
It is at position: 10

请注意,位置是从 1 开始计数的,这意味着第一个字符的位置是 1,而不是 0。

提取子字符串

现在,让我们学习如何提取字符串的一部分。

  1. 将以下代码添加到你的 string_operations.sh 文件中:

    echo -e "\nStep 4: Substring Extraction"
    
    STRING="The quick brown fox jumps over the lazy dog"
    START=10
    LENGTH=5
    
    SUBSTRING=${STRING:$START:$LENGTH}
    
    echo "The original string is: $STRING"
    echo "Extracting 5 characters starting from position 10:"
    echo "The substring is: $SUBSTRING"

    让我们分解一下这段代码:

    • 我们定义了一个包含示例句子的 STRING 变量。
    • START 是我们希望开始提取的位置(请注意,这里是从 0 开始计数的)。
    • LENGTH 是我们希望提取的字符数。
    • ${STRING:$START:$LENGTH} 是提取子字符串的语法。它的意思是“从 STRING 中,从位置 START 开始提取 LENGTH 个字符”。
    • 我们将这个子字符串存储在 SUBSTRING 变量中,然后打印出所有内容。
  2. 保存文件并再次运行脚本:

    ./string_operations.sh

你应该会看到类似以下的额外输出:

Step 4: Substring Extraction
The original string is: The quick brown fox jumps over the lazy dog
Extracting 5 characters starting from position 10:
The substring is: brown

请注意,与 expr index 命令不同,这里的字符串位置是从 0 开始计数的,而不是从 1 开始。这就是为什么我们从位置 10 开始提取到 "brown"。

字符串替换

最后,让我们学习如何替换字符串的一部分。

  1. 将以下代码添加到你的 string_operations.sh 文件中:

    echo -e "\nStep 5: String Replacement"
    
    STRING="The quick brown fox jumps over the lazy dog"
    echo "Original string: $STRING"
    
    ## 将第一个 'o' 替换为 'O'
    NEW_STRING=${STRING/o/O}
    echo "Replacing first 'o' with 'O': $NEW_STRING"
    
    ## 将所有 'o' 替换为 'O'
    NEW_STRING=${STRING//o/O}
    echo "Replacing all 'o' with 'O': $NEW_STRING"
    
    ## 如果 'quick' 在字符串开头,则将其替换为 'slow'
    NEW_STRING=${STRING/#quick/slow}
    echo "Replacing 'quick' with 'slow' at the beginning: $NEW_STRING"
    
    ## 如果 'dog' 在字符串末尾,则将其替换为 'cat'
    NEW_STRING=${STRING/%dog/cat}
    echo "Replacing 'dog' with 'cat' at the end: $NEW_STRING"

    这段代码展示了多种字符串替换技术:

    • ${STRING/o/O} 将第一个 'o' 替换为 'O'。
    • ${STRING//o/O} 将所有 'o' 替换为 'O'。
    • ${STRING/#quick/slow} 将 'quick' 替换为 'slow',但仅当 'quick' 位于字符串开头时。
    • ${STRING/%dog/cat} 将 'dog' 替换为 'cat',但仅当 'dog' 位于字符串末尾时。
  2. 保存文件并最后一次运行脚本:

    ./string_operations.sh

你应该会看到类似以下的额外输出:

Step 5: String Replacement
Original string: The quick brown fox jumps over the lazy dog
Replacing first 'o' with 'O': The quick brOwn fox jumps over the lazy dog
Replacing all 'o' with 'O': The quick brOwn fOx jumps Over the lazy dOg
Replacing 'quick' with 'slow' at the beginning: The quick brown fox jumps over the lazy dog
Replacing 'dog' with 'cat' at the end: The quick brown fox jumps over the lazy cat

注意每种替换操作对字符串的不同影响。

总结

在本实验中,你学习并练习了 shell 脚本中的几种基本字符串操作:

  1. 创建和执行 shell 脚本
  2. 计算字符串的长度
  3. 查找字符串中某个字符的位置
  4. 从较大的字符串中提取子字符串
  5. 执行各种字符串替换操作

这些技能是 shell 脚本中更复杂文本处理任务的基础。随着你继续使用 shell 脚本,你会发现这些字符串操作在项目中处理和解析文本数据时非常有用。记住,练习是掌握这些概念的关键,所以不要犹豫,尝试不同的字符串和操作吧!