介绍
在本实验中,你将学习如何在 Linux 中使用 Shell 变量。Shell 变量对于在脚本中存储和操作数据至关重要。它们可以保存各种类型的值,例如数字、字符或字符串。本实验将引导你完成 Shell 变量的创建、引用和使用,为你的 Shell 脚本编写打下坚实的基础。
在本实验中,你将学习如何在 Linux 中使用 Shell 变量。Shell 变量对于在脚本中存储和操作数据至关重要。它们可以保存各种类型的值,例如数字、字符或字符串。本实验将引导你完成 Shell 变量的创建、引用和使用,为你的 Shell 脚本编写打下坚实的基础。
Shell 变量是通过使用 = 符号为其赋值来创建的。让我们从创建一个定义了一些变量的简单 Shell 脚本开始。
在你的 WebIDE (VS Code) 中打开终端。
在 /home/labex/project 目录下创建一个名为 variables.sh 的新文件:
touch /home/labex/project/variables.sh
在 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:一个包含多个空格的字符串变量保存文件。
为脚本添加可执行权限:
chmod +x /home/labex/project/variables.sh
运行脚本:
./variables.sh
你应该会看到以下输出:
Price per apple: 5
My first letters: ABC
Greeting: Hello world!
请注意,当使用单引号定义变量且在 echo 语句中不加引号时,greeting 变量中的额外空格在输出中得到了保留。
在引用 Shell 变量时,有几种情况需要使用特殊的语法。让我们来探索这些案例。
在 WebIDE 中打开 variables.sh 文件。
将文件内容替换为以下内容:
#!/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"
保存文件。
运行脚本:
./variables.sh
你应该会看到以下输出:
The price of an Apple today is: $HK 5
The first 10 letters in the alphabet are: ABCDEFGHIJ
Hello world!
Hello world!
注意其中的区别:
$ 符号进行了转义,以便将其作为普通字符打印。{} 来明确界定变量名的范围。命令替换允许你将命令的输出作为变量的值。这可以通过将命令包裹在 $() 或反引号(``)中来实现。
在 WebIDE 中打开 variables.sh 文件。
在文件末尾添加以下内容:
## 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"
保存文件。
运行脚本:
./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)) 语法来执行数学计算。
在 /home/labex/project 目录下创建一个名为 arithmetic.sh 的新文件:
touch /home/labex/project/arithmetic.sh
在 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"
保存文件。
为脚本添加可执行权限:
chmod +x /home/labex/project/arithmetic.sh
运行脚本:
./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 会话中运行的所有进程都可用的变量。让我们探索一些常见的环境变量以及如何创建我们自己的环境变量。
在 /home/labex/project 目录下创建一个名为 environment.sh 的新文件:
touch /home/labex/project/environment.sh
在 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"
保存文件。
为脚本添加可执行权限:
chmod +x /home/labex/project/environment.sh
运行脚本:
./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 系统时将发挥巨大作用。
本实验的关键收获包括:
在你继续探索 Linux 和 Shell 脚本的过程中,请记住变量是存储和操作数据的强大工具。尝试在你的脚本中使用它们,使你的代码更加灵活且可重用。