介绍
Linux 命令行提供了强大的工具来执行算术计算。Linux 中最通用的计算器之一是 bc(基本计算器,Basic Calculator),它允许用户直接从终端执行简单和复杂的数学运算。
在这个实验中,你将学习如何使用 bc 命令在 Linux 中执行各种算术计算。你将从基本操作开始,逐步过渡到更复杂的表达式。你学到的技能将有助于在 Linux 环境中高效地编写脚本、处理数据和解决计算问题。
在本实验结束时,你将能够:
- 使用
bc执行基本算术运算 - 处理包含多个运算的复杂数学表达式
- 在计算中使用变量并控制精度
- 创建自动化数学计算的脚本
让我们开始探索 Linux bc 计算器的功能吧。
使用 bc 进行基本算术运算
在这一步中,我们将学习如何在 Linux 中使用 bc 命令进行基本算术运算。bc 命令是一个强大的计算器工具,允许你直接从终端执行计算。
安装 bc
首先,确保你的系统上已经安装了 bc 计算器:
sudo apt-get update
sudo apt-get install -y bc
你应该会看到指示安装过程的输出。安装完成后,你可以通过输入以下命令来验证其是否正常工作:
bc --version
你应该会看到 bc 计算器的版本信息。
创建一个简单的加法脚本
现在,让我们创建一个简单的脚本来使用 bc 执行加法运算:
- 导航到项目目录:
cd ~/project
- 创建一个名为
simple_calc.sh的新脚本文件:
touch simple_calc.sh
- 使用 nano 编辑器打开该文件:
nano simple_calc.sh
- 在文件中添加以下内容:
#!/bin/zsh
## Simple addition using bc
echo "20 + 5" | bc
按
Ctrl+O保存文件,然后按Enter,再按Ctrl+X退出 nano。使脚本可执行:
chmod +x simple_calc.sh
- 运行脚本:
./simple_calc.sh
你应该会看到输出:
25
这展示了 bc 如何将表达式 "20 + 5" 作为输入并得出结果 25。
理解 bc 的工作原理
bc 命令是一个面向管道的计算器。我们使用管道符号 (|) 将表达式发送给 bc 进行计算。基本语法如下:
echo "expression" | bc
你还可以尝试其他基本运算:
echo "10 - 3" | bc ## 减法
echo "4 * 6" | bc ## 乘法
echo "15 / 3" | bc ## 除法
在你的终端中运行这些命令以查看结果:
echo "10 - 3" | bc
echo "4 * 6" | bc
echo "15 / 3" | bc
输出应该是:
7
24
5
使用 bc 进行浮点计算
在这一步中,我们将学习如何使用 bc 计算器进行浮点计算。默认情况下,bc 执行整数运算,但我们可以使用 scale 参数来控制小数精度。
理解 scale 参数
bc 中的 scale 参数决定了计算中使用的小数位数。让我们看看它是如何工作的:
- 尝试以下命令,在不设置
scale的情况下进行除法运算:
echo "5 / 2" | bc
输出将是:
2
注意,结果被截断为整数,而不是四舍五入。
- 现在,让我们设置
scale以获得更精确的结果:
echo "scale=2; 5 / 2" | bc
输出将是:
2.50
scale=2 告诉 bc 以 2 位小数计算结果。
创建用于复杂计算的脚本
让我们创建一个脚本,演示如何使用 scale 并执行更复杂的计算:
- 如果你还不在项目目录中,请导航到该目录:
cd ~/project
- 创建一个名为
complex_calc.sh的新脚本文件:
touch complex_calc.sh
- 使用 nano 编辑器打开该文件:
nano complex_calc.sh
- 在文件中添加以下内容:
#!/bin/zsh
## Complex calculation using bc with scale
result=$(echo "scale=2; (10.5 * 4.2) - (5.5 / 2) + 3^2" | bc)
echo "Result: $result"
此脚本:
- 将
scale设置为 2 位小数 - 执行乘法运算:10.5 * 4.2
- 执行除法运算:5.5 / 2
- 计算幂运算:3^2(3 的 2 次方)
- 通过加法和减法组合这些运算
- 将结果存储在名为
result的变量中 - 用描述性标签打印结果
按
Ctrl+O保存文件,然后按Enter,再按Ctrl+X退出 nano。使脚本可执行:
chmod +x complex_calc.sh
- 运行脚本:
./complex_calc.sh
你应该会看到类似以下的输出:
Result: 46.35
让我们分解一下计算过程:
- 10.5 * 4.2 = 44.1
- 5.5 / 2 = 2.75
- 3^2 = 9
- 44.1 - 2.75 + 9 = 50.35
等等,预期结果应该是 50.35,但我们得到的是 46.35。这是因为脚本中的计算需要修正。让我们来修复它:
nano complex_calc.sh
更新计算内容:
#!/bin/zsh
## Complex calculation using bc with scale
result=$(echo "scale=2; (10.5 * 4.2) - (5.5 / 2) + 3^2" | bc)
echo "Result: $result"
## Breaking down the calculation
part1=$(echo "scale=2; 10.5 * 4.2" | bc)
part2=$(echo "scale=2; 5.5 / 2" | bc)
part3=$(echo "3^2" | bc)
echo "Part 1 (10.5 * 4.2): $part1"
echo "Part 2 (5.5 / 2): $part2"
echo "Part 3 (3^2): $part3"
echo "Final: $part1 - $part2 + $part3 = $(echo "scale=2; $part1 - $part2 + $part3" | bc)"
保存更改并再次运行脚本:
./complex_calc.sh
这个更新后的脚本将展示计算的每个部分的分解,使你更容易理解最终结果是如何得出的。
在 bc 中使用变量
在这一步,我们将学习如何在 bc 中使用变量,让计算变得更加灵活和强大。bc 计算器允许我们定义变量,并在多个计算中重复使用它们。
在 bc 交互模式中使用变量
首先,让我们探索如何在 bc 交互模式中直接使用变量:
- 以交互模式启动
bc计算器:
bc
- 定义一个变量并使用它进行计算:
x = 10
x + 5
x * 2
你应该会看到:
15
20
- 你可以定义多个变量并一起使用:
y = 7
x + y
x * y
输出将是:
17
70
- 按
Ctrl+D或输入quit退出交互模式。
创建使用 bc 变量的脚本
现在,让我们创建一个脚本来演示如何在 bc 计算中使用变量:
- 如果你还不在项目目录中,请导航到该目录:
cd ~/project
- 创建一个名为
variable_calc.sh的新脚本文件:
touch variable_calc.sh
- 使用 nano 编辑器打开该文件:
nano variable_calc.sh
- 在文件中添加以下内容:
#!/bin/zsh
## Script to demonstrate using variables in bc
## Define input values
radius=5
height=10
## Calculate cylinder volume (π * r² * h)
volume=$(echo "scale=2; 3.14159 * $radius * $radius * $height" | bc)
## Calculate cylinder surface area (2π * r² + 2π * r * h)
surface_area=$(echo "scale=2; 2 * 3.14159 * $radius * $radius + 2 * 3.14159 * $radius * $height" | bc)
## Display results
echo "Cylinder properties with radius $radius and height $height:"
echo "Volume: $volume cubic units"
echo "Surface Area: $surface_area square units"
此脚本:
- 为圆柱体的半径和高度定义变量
- 使用公式 π r² h 计算体积
- 使用公式 2π r² + 2π r * h 计算表面积
- 以适当的单位显示结果
按
Ctrl+O保存文件,然后按Enter,再按Ctrl+X退出 nano。使脚本可执行:
chmod +x variable_calc.sh
- 运行脚本:
./variable_calc.sh
你应该会看到类似以下的输出:
Cylinder properties with radius 5 and height 10:
Volume: 785.39 cubic units
Surface Area: 471.23 square units
在 bc 内部使用变量
我们还可以使用多行方式在 bc 内部完全定义和使用变量。让我们创建另一个脚本来演示这一点:
- 创建一个新文件:
nano bc_variables.sh
- 添加以下内容:
#!/bin/zsh
## Script to demonstrate using variables within bc
bc << EOF
scale=2
radius = 5
height = 10
pi = 3.14159
## Calculate cylinder volume
volume = pi * radius^2 * height
print "Volume: ", volume, " cubic units\n"
## Calculate cylinder surface area
surface_area = 2 * pi * radius^2 + 2 * pi * radius * height
print "Surface Area: ", surface_area, " square units\n"
EOF
此脚本:
- 使用“here 文档”(EOF)向
bc发送多行内容 - 在
bc内部定义所有变量 - 使用这些变量进行计算
- 使用
bc中的print命令显示结果
- 保存文件,使其可执行并运行:
chmod +x bc_variables.sh
./bc_variables.sh
输出应该与上一个脚本类似,但展示了在 bc 中使用变量的不同方法。
创建实用的 bc 计算器脚本
在这最后一步,我们将创建一个更实用的计算器脚本,它会整合我们所学的所有概念。这个脚本将允许用户通过从菜单中选择选项来执行各种计算。
构建交互式计算器
让我们创建一个作为交互式计算器的脚本:
- 如果你还不在项目目录中,请导航到该目录:
cd ~/project
- 创建一个名为
calculator.sh的新脚本文件:
touch calculator.sh
- 使用 nano 编辑器打开该文件:
nano calculator.sh
- 在文件中添加以下内容:
#!/bin/zsh
## Interactive calculator script using bc
## Function to calculate area of a circle
calculate_circle_area() {
echo -n "Enter the radius of the circle: "
read radius
area=$(echo "scale=2; 3.14159 * $radius * $radius" | bc)
echo "The area of the circle with radius $radius is: $area square units"
}
## Function to calculate area of a rectangle
calculate_rectangle_area() {
echo -n "Enter the length of the rectangle: "
read length
echo -n "Enter the width of the rectangle: "
read width
area=$(echo "scale=2; $length * $width" | bc)
echo "The area of the rectangle with length $length and width $width is: $area square units"
}
## Function to solve quadratic equation ax² + bx + c = 0
solve_quadratic() {
echo -n "Enter coefficient a: "
read a
echo -n "Enter coefficient b: "
read b
echo -n "Enter coefficient c: "
read c
## Calculate discriminant
discriminant=$(echo "scale=4; ($b * $b) - (4 * $a * $c)" | bc)
## Check the discriminant
if (($(echo "$discriminant < 0" | bc -l))); then
echo "The equation has no real solutions (discriminant < 0)"
elif (($(echo "$discriminant == 0" | bc -l))); then
## One solution
x=$(echo "scale=4; -$b / (2 * $a)" | bc)
echo "The equation has one solution: x = $x"
else
## Two solutions
x1=$(echo "scale=4; (-$b + sqrt($discriminant)) / (2 * $a)" | bc -l)
x2=$(echo "scale=4; (-$b - sqrt($discriminant)) / (2 * $a)" | bc -l)
echo "The equation has two solutions:"
echo "x1 = $x1"
echo "x2 = $x2"
fi
}
## Main program loop
while true; do
echo ""
echo "===== BC Calculator Menu ====="
echo "1. Calculate area of a circle"
echo "2. Calculate area of a rectangle"
echo "3. Solve quadratic equation (ax² + bx + c = 0)"
echo "4. Exit"
echo ""
echo -n "Enter your choice (1-4): "
read choice
case $choice in
1) calculate_circle_area ;;
2) calculate_rectangle_area ;;
3) solve_quadratic ;;
4)
echo "Exiting calculator. Goodbye!"
exit 0
;;
*) echo "Invalid option. Please try again." ;;
esac
done
此脚本:
- 为不同类型的计算定义函数
- 为用户提供一个菜单界面,以便选择所需的计算
- 对所有数学运算使用
bc - 处理像二次方程这样更复杂的数学公式
按
Ctrl+O保存文件,然后按Enter,再按Ctrl+X退出 nano。使脚本可执行:
chmod +x calculator.sh
- 运行计算器脚本:
./calculator.sh
- 尝试菜单中的每个选项:
- 选择选项 1 并输入半径以计算圆的面积
- 选择选项 2 并输入长度和宽度以计算矩形的面积
- 选择选项 3 并输入系数以求解二次方程(尝试 a=1,b=5,c=6)
- 选择选项 4 退出计算器
例如,如果你选择选项 3 并输入 a=1,b=5,c=6,你应该会看到类似以下的输出:
The equation has two solutions:
x1 = -2.0000
x2 = -3.0000
这个交互式脚本展示了如何将 bc 融入更复杂的程序中,以解决各种数学问题。
总结
在这个实验中,你学习了如何在 Linux 中使用 bc 命令行计算器来执行各种算术运算。
以下是你所完成内容的总结:
基本算术运算:
- 安装并验证了
bc计算器 - 创建了一个简单的脚本来执行加法运算
- 学习了如何使用管道运算符将表达式发送给
bc - 练习了加法、减法、乘法和除法等基本运算
- 安装并验证了
浮点计算:
- 使用
scale参数来控制小数精度 - 创建了一个用于涉及多个运算的更复杂计算的脚本
- 理解了运算顺序以及如何使用括号来控制计算流程
- 使用
使用变量:
- 在
bc计算中使用了 shell 变量 - 探索了
bc的交互模式以定义和使用变量 - 创建了利用变量进行更灵活计算的脚本
- 学习了如何使用“here 文档”进行多行
bc操作
- 在
实际应用:
- 构建了一个带有菜单界面的交互式计算器脚本
- 实现了常见的几何计算
- 求解了像二次公式这样更复杂的方程
- 将所学的所有概念整合到一个实用的应用程序中
这些技能使你能够在 Linux 命令行中高效地执行数学运算,并在脚本中自动化计算。bc 计算器是一个强大的工具,它可以处理从简单算术到复杂数学公式的所有内容,使其成为在 Linux 环境中工作的系统管理员、开发人员和数据分析师的必备实用工具。
随着你继续使用 Linux,你会发现将 bc 这样的命令行工具与 shell 脚本结合使用,可以帮助你更高效地解决各种问题。



