使用 Shell 变量

ShellShellBeginner
立即练习

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

介绍

在本实验中,你将学习如何在 Linux 中使用 shell 变量。Shell 变量对于在 shell 脚本中存储和操作数据至关重要。它们可以保存各种类型的值,例如数字、字符或字符串。本实验将引导你创建、引用和使用 shell 变量,为 shell 脚本编写打下坚实的基础。

创建 Shell 变量

Shell 变量通过使用 = 符号为其赋值来创建。让我们从一个定义一些变量的简单 shell 脚本开始。

  1. 在你的 WebIDE(VS Code)中打开一个终端。

  2. /home/labex/project 目录下创建一个名为 variables.sh 的新文件:

    touch /home/labex/project/variables.sh
  3. 在 WebIDE 中打开 variables.sh 文件并添加以下内容:

    #!/bin/bash
    
    PRICE_PER_APPLE=5
    MyFirstLetters=ABC
    greeting='Hello        world!'
    
    echo "Price per apple: $PRICE_PER_APPLE"
    echo "My first letters: $MyFirstLetters"
    echo "Greeting: $greeting"

    在这个脚本中,我们创建了三个变量:

    • PRICE_PER_APPLE:一个整数变量
    • MyFirstLetters:一个字符串变量
    • greeting:一个包含多个空格的字符串变量
  4. 保存文件。

  5. 使脚本可执行:

    chmod +x /home/labex/project/variables.sh
  6. 运行脚本:

    ./variables.sh

    你应该会看到以下输出:

    Price per apple: 5
    My first letters: ABC
    Greeting: Hello        world!

    注意,当使用单引号定义变量并且在 echo 语句中不使用引号时,greeting 变量中的额外空格在输出中会被保留。

引用 Shell 变量

在引用 shell 变量时,有一些场景需要使用特殊的语法。让我们来探讨这些情况。

  1. 在 WebIDE 中打开 variables.sh 文件。

  2. 将文件内容替换为以下内容:

    #!/bin/bash
    
    PRICE_PER_APPLE=5
    MyFirstLetters=ABC
    greeting='Hello        world!'
    
    ## 转义特殊字符
    echo "The price of an Apple today is: \$HK $PRICE_PER_APPLE"
    
    ## 避免歧义
    echo "The first 10 letters in the alphabet are: ${MyFirstLetters}DEFGHIJ"
    
    ## 保留空格
    echo $greeting
    echo "$greeting"
  3. 保存文件。

  4. 运行脚本:

    ./variables.sh

    你应该会看到以下输出:

    The price of an Apple today is: $HK 5
    The first 10 letters in the alphabet are: ABCDEFGHIJ
    Hello world!
    Hello        world!

    注意以下区别:

    • 在第一行中,$ 符号被转义以原样打印。
    • 在第二行中,使用花括号 {} 来明确变量名的范围。
    • 最后两行展示了在引用包含空格的变量时,使用引号和不使用引号的区别。

命令替换

命令替换允许你将命令的输出作为变量的值。这可以通过将命令用 $() 或反引号(``)括起来实现。

  1. 在 WebIDE 中打开 variables.sh 文件。

  2. 在文件末尾添加以下内容:

    ## 命令替换
    CURRENT_DATE=$(date +"%Y-%m-%d")
    echo "Today's date is: $CURRENT_DATE"
    
    FILES_IN_DIR=$(ls)
    echo "Files in the current directory:"
    echo "$FILES_IN_DIR"
    
    UPTIME=$(uptime -p)
    echo "System uptime: $UPTIME"
  3. 保存文件。

  4. 运行脚本:

    ./variables.sh

    你应该会看到类似以下的输出(实际值取决于你的系统):

    Today's date is: 2023-08-16
    Files in the current directory:
    variables.sh
    System uptime: up 2 hours, 15 minutes

    在这个例子中:

    • $(date +"%Y-%m-%d") 运行 date 命令并捕获其输出。
    • $(ls) 运行 ls 命令并捕获其输出。
    • $(uptime -p) 运行带有 -p 选项的 uptime 命令并捕获其输出。

算术运算

Shell 变量也可以用于算术运算。Bash 提供了 $((expression)) 语法来执行算术操作。

  1. /home/labex/project 目录下创建一个名为 arithmetic.sh 的新文件:

    touch /home/labex/project/arithmetic.sh
  2. 在 WebIDE 中打开 arithmetic.sh 文件并添加以下内容:

    #!/bin/bash
    
    X=10
    Y=5
    
    ## 加法
    SUM=$((X + Y))
    echo "Sum of $X and $Y is: $SUM"
    
    ## 减法
    DIFF=$((X - Y))
    echo "Difference between $X and $Y is: $DIFF"
    
    ## 乘法
    PRODUCT=$((X * Y))
    echo "Product of $X and $Y is: $PRODUCT"
    
    ## 除法
    QUOTIENT=$((X / Y))
    echo "Quotient of $X divided by $Y is: $QUOTIENT"
    
    ## 取模(余数)
    REMAINDER=$((X % Y))
    echo "Remainder of $X divided by $Y is: $REMAINDER"
    
    ## 自增
    X=$((X + 1))
    echo "After incrementing, X is now: $X"
    
    ## 自减
    Y=$((Y - 1))
    echo "After decrementing, Y is now: $Y"
  3. 保存文件。

  4. 使脚本可执行:

    chmod +x /home/labex/project/arithmetic.sh
  5. 运行脚本:

    ./arithmetic.sh

    你应该会看到以下输出:

    Sum of 10 and 5 is: 15
    Difference between 10 and 5 is: 5
    Product of 10 and 5 is: 50
    Quotient of 10 divided by 5 is: 2
    Remainder of 10 divided by 5 is: 0
    After incrementing, X is now: 11
    After decrementing, Y is now: 4

    这个脚本展示了使用 shell 变量进行各种算术运算的示例。

使用环境变量

环境变量是一种在当前 shell 会话中所有进程都可用的变量。让我们来探索一些常见的环境变量以及如何创建我们自己的环境变量。

  1. /home/labex/project 目录下创建一个名为 environment.sh 的新文件:

    touch /home/labex/project/environment.sh
  2. 在 WebIDE 中打开 environment.sh 文件并添加以下内容:

    #!/bin/bash
    
    ## 显示一些常见的环境变量
    echo "Home directory: $HOME"
    echo "Current user: $LOGNAME"
    echo "Shell being used: $SHELL"
    echo "Current PATH: $PATH"
    
    ## 创建一个新的环境变量
    export MY_VARIABLE="Hello from my variable"
    
    ## 显示新变量
    echo "My new variable: $MY_VARIABLE"
    
    ## 创建一个子进程以演示变量作用域
    bash -c 'echo "MY_VARIABLE in child process: $MY_VARIABLE"'
    
    ## 删除环境变量
    unset MY_VARIABLE
    
    ## 验证变量是否已删除
    echo "MY_VARIABLE after unsetting: $MY_VARIABLE"
  3. 保存文件。

  4. 使脚本可执行:

    chmod +x /home/labex/project/environment.sh
  5. 运行脚本:

    ./environment.sh

    你应该会看到类似以下的输出(实际值取决于你的系统):

    Home directory: /home/labex
    Current user: labex
    Shell being used: /bin/zsh
    Current PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
    My new variable: Hello from my variable
    MY_VARIABLE in child process: Hello from my variable
    MY_VARIABLE after unsetting:

    这个脚本展示了如何访问现有的环境变量、创建新的环境变量以及删除它们。

总结

在本实验中,你学习了如何在 Linux 中使用 shell 变量。你探索了创建和引用变量、使用命令替换将命令输出赋值给变量、对变量执行算术运算以及使用环境变量。这些技能是 shell 脚本编写的重要基础,在你继续使用 Linux 系统时将非常有用。

本实验的关键要点包括:

  • 创建和引用 shell 变量
  • 在不同场景下使用特殊语法引用变量
  • 利用命令替换捕获命令输出
  • 对 shell 变量执行算术运算
  • 使用环境变量

在你继续学习 Linux 和 shell 脚本的过程中,请记住变量是存储和操作数据的强大工具。在你的脚本中多加练习使用它们,以使你的代码更加灵活和可重用。