Linux 算术计算

LinuxLinuxBeginner
立即练习

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

简介

Linux 命令行提供了强大的工具来执行算术计算。Linux 中最通用的计算器之一是 bc(基本计算器,Basic Calculator),它允许用户直接从终端执行简单和复杂的数学运算。

在这个实验中,你将学习如何使用 bc 命令在 Linux 中执行各种算术计算。你将从基本操作开始,逐步过渡到更复杂的表达式。你学到的技能将有助于在 Linux 环境中高效地编写脚本、处理数据和解决计算问题。

在本实验结束时,你将能够:

  • 使用 bc 执行基本算术运算
  • 处理包含多个运算的复杂数学表达式
  • 在计算中使用变量并控制精度
  • 创建自动化数学计算的脚本

让我们开始探索 Linux bc 计算器的功能吧。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/PackagesandSoftwaresGroup(["Packages and Softwares"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux/BasicSystemCommandsGroup -.-> linux/bc("Arithmetic Calculations") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/PackagesandSoftwaresGroup -.-> linux/apt("Package Handling") linux/VersionControlandTextEditorsGroup -.-> linux/nano("Simple Text Editing") subgraph Lab Skills linux/bc -.-> lab-271229{{"Linux 算术计算"}} linux/touch -.-> lab-271229{{"Linux 算术计算"}} linux/chmod -.-> lab-271229{{"Linux 算术计算"}} linux/cd -.-> lab-271229{{"Linux 算术计算"}} linux/apt -.-> lab-271229{{"Linux 算术计算"}} linux/nano -.-> lab-271229{{"Linux 算术计算"}} end

使用 bc 进行基本算术运算

在这一步中,我们将学习如何在 Linux 中使用 bc 命令进行基本算术运算。bc 命令是一个强大的计算器工具,允许你直接从终端执行计算。

安装 bc

首先,确保你的系统上已经安装了 bc 计算器:

sudo apt-get update
sudo apt-get install -y bc

你应该会看到指示安装过程的输出。安装完成后,你可以通过输入以下命令来验证其是否正常工作:

bc --version

你应该会看到 bc 计算器的版本信息。

创建一个简单的加法脚本

现在,让我们创建一个简单的脚本来使用 bc 执行加法运算:

  1. 导航到项目目录:
cd ~/project
  1. 创建一个名为 simple_calc.sh 的新脚本文件:
touch simple_calc.sh
  1. 使用 nano 编辑器打开该文件:
nano simple_calc.sh
  1. 在文件中添加以下内容:
#!/bin/zsh

## Simple addition using bc
echo "20 + 5" | bc
  1. Ctrl+O 保存文件,然后按 Enter,再按 Ctrl+X 退出 nano。

  2. 使脚本可执行:

chmod +x simple_calc.sh
  1. 运行脚本:
./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 参数决定了计算中使用的小数位数。让我们看看它是如何工作的:

  1. 尝试以下命令,在不设置 scale 的情况下进行除法运算:
echo "5 / 2" | bc

输出将是:

2

注意,结果被截断为整数,而不是四舍五入。

  1. 现在,让我们设置 scale 以获得更精确的结果:
echo "scale=2; 5 / 2" | bc

输出将是:

2.50

scale=2 告诉 bc 以 2 位小数计算结果。

创建用于复杂计算的脚本

让我们创建一个脚本,演示如何使用 scale 并执行更复杂的计算:

  1. 如果你还不在项目目录中,请导航到该目录:
cd ~/project
  1. 创建一个名为 complex_calc.sh 的新脚本文件:
touch complex_calc.sh
  1. 使用 nano 编辑器打开该文件:
nano complex_calc.sh
  1. 在文件中添加以下内容:
#!/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 的变量中
  • 用描述性标签打印结果
  1. Ctrl+O 保存文件,然后按 Enter,再按 Ctrl+X 退出 nano。

  2. 使脚本可执行:

chmod +x complex_calc.sh
  1. 运行脚本:
./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 交互模式中直接使用变量:

  1. 以交互模式启动 bc 计算器:
bc
  1. 定义一个变量并使用它进行计算:
x = 10
x + 5
x * 2

你应该会看到:

15
20
  1. 你可以定义多个变量并一起使用:
y = 7
x + y
x * y

输出将是:

17
70
  1. Ctrl+D 或输入 quit 退出交互模式。

创建使用 bc 变量的脚本

现在,让我们创建一个脚本来演示如何在 bc 计算中使用变量:

  1. 如果你还不在项目目录中,请导航到该目录:
cd ~/project
  1. 创建一个名为 variable_calc.sh 的新脚本文件:
touch variable_calc.sh
  1. 使用 nano 编辑器打开该文件:
nano variable_calc.sh
  1. 在文件中添加以下内容:
#!/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 计算表面积
  • 以适当的单位显示结果
  1. Ctrl+O 保存文件,然后按 Enter,再按 Ctrl+X 退出 nano。

  2. 使脚本可执行:

chmod +x variable_calc.sh
  1. 运行脚本:
./variable_calc.sh

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

Cylinder properties with radius 5 and height 10:
Volume: 785.39 cubic units
Surface Area: 471.23 square units

在 bc 内部使用变量

我们还可以使用多行方式在 bc 内部完全定义和使用变量。让我们创建另一个脚本来演示这一点:

  1. 创建一个新文件:
nano bc_variables.sh
  1. 添加以下内容:
#!/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 命令显示结果
  1. 保存文件,使其可执行并运行:
chmod +x bc_variables.sh
./bc_variables.sh

输出应该与上一个脚本类似,但展示了在 bc 中使用变量的不同方法。

创建实用的 bc 计算器脚本

在这最后一步,我们将创建一个更实用的计算器脚本,它会整合我们所学的所有概念。这个脚本将允许用户通过从菜单中选择选项来执行各种计算。

构建交互式计算器

让我们创建一个作为交互式计算器的脚本:

  1. 如果你还不在项目目录中,请导航到该目录:
cd ~/project
  1. 创建一个名为 calculator.sh 的新脚本文件:
touch calculator.sh
  1. 使用 nano 编辑器打开该文件:
nano calculator.sh
  1. 在文件中添加以下内容:
#!/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
  • 处理像二次方程这样更复杂的数学公式
  1. Ctrl+O 保存文件,然后按 Enter,再按 Ctrl+X 退出 nano。

  2. 使脚本可执行:

chmod +x calculator.sh
  1. 运行计算器脚本:
./calculator.sh
  1. 尝试菜单中的每个选项:
    • 选择选项 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 命令行计算器来执行各种算术运算。

以下是你所完成内容的总结:

  1. 基本算术运算

    • 安装并验证了 bc 计算器
    • 创建了一个简单的脚本来执行加法运算
    • 学习了如何使用管道运算符将表达式发送给 bc
    • 练习了加法、减法、乘法和除法等基本运算
  2. 浮点计算

    • 使用 scale 参数来控制小数精度
    • 创建了一个用于涉及多个运算的更复杂计算的脚本
    • 理解了运算顺序以及如何使用括号来控制计算流程
  3. 使用变量

    • bc 计算中使用了 shell 变量
    • 探索了 bc 的交互模式以定义和使用变量
    • 创建了利用变量进行更灵活计算的脚本
    • 学习了如何使用“here 文档”进行多行 bc 操作
  4. 实际应用

    • 构建了一个带有菜单界面的交互式计算器脚本
    • 实现了常见的几何计算
    • 求解了像二次公式这样更复杂的方程
    • 将所学的所有概念整合到一个实用的应用程序中

这些技能使你能够在 Linux 命令行中高效地执行数学运算,并在脚本中自动化计算。bc 计算器是一个强大的工具,它可以处理从简单算术到复杂数学公式的所有内容,使其成为在 Linux 环境中工作的系统管理员、开发人员和数据分析师的必备实用工具。

随着你继续使用 Linux,你会发现将 bc 这样的命令行工具与 shell 脚本结合使用,可以帮助你更高效地解决各种问题。