使用 Shell 变量

ShellBeginner
立即练习

介绍

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

这是一个引导实验,提供了逐步指导来帮助你学习和练习。请仔细遵循说明完成每个步骤并获得动手经验。历史数据表明,这是一个初学者级别的实验,完成率为 81%。它获得了学习者 99% 的好评率。

创建 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. 在文件末尾添加以下内容:

    ## Command substitution
    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
    
    ## Addition
    SUM=$((X + Y))
    echo "Sum of $X and $Y is: $SUM"
    
    ## Subtraction
    DIFF=$((X - Y))
    echo "Difference between $X and $Y is: $DIFF"
    
    ## Multiplication
    PRODUCT=$((X * Y))
    echo "Product of $X and $Y is: $PRODUCT"
    
    ## Division
    QUOTIENT=$((X / Y))
    echo "Quotient of $X divided by $Y is: $QUOTIENT"
    
    ## Modulus (remainder)
    REMAINDER=$((X % Y))
    echo "Remainder of $X divided by $Y is: $REMAINDER"
    
    ## Increment
    X=$((X + 1))
    echo "After incrementing, X is now: $X"
    
    ## Decrement
    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
    
    ## Displaying some common environment variables
    echo "Home directory: $HOME"
    echo "Current user: $LOGNAME"
    echo "Shell being used: $SHELL"
    echo "Current PATH: $PATH"
    
    ## Creating a new environment variable
    export MY_VARIABLE="Hello from my variable"
    
    ## Displaying the new variable
    echo "My new variable: $MY_VARIABLE"
    
    ## Creating a child process to demonstrate variable scope
    bash -c 'echo "MY_VARIABLE in child process: $MY_VARIABLE"'
    
    ## Removing the environment variable
    unset MY_VARIABLE
    
    ## Verifying the variable is unset
    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 脚本的过程中,请记住变量是存储和操作数据的强大工具。尝试在你的脚本中使用它们,使你的代码更加灵活且可重用。