返回

在 Linux 中编写一个命令行计算器:一个初学者指南

Linux

在 Linux 中编写一个简单的命令行计算器

前言

在 Linux 操作系统中,编写一个简单的计算器程序是一项既实用又有趣的任务。本指南将一步步指导您使用 Bash 脚本语言创建您自己的命令行计算器,它能够执行基本的数学运算,如加、减、乘和除。

初始化

首先,创建一个名为 calculator.sh 的新 Bash 脚本文件。脚本的开头应初始化三个变量:

  • result:存储当前计算结果
  • memory:存储存储的值
  • operator:存储当前运算符
#!/bin/bash

result=0
memory=0
operator=

获取操作数

下一步是定义一个函数来获取用户输入的操作数。操作数可以是数字、内存调用 (MR)、内存清除 (MC)、结果清除 (C) 或退出 (X)。

get_operand() {
  read -p "Enter operand: " input
  case "$input" in
    [0-9]*) operand="$input";;
    "MR") operand="$result";;
    "MC") memory=0; echo "0 -> M";;
    "C") result=0; echo "results cleared";;
    "X") echo "Good bye."; exit 0;;
    *) echo "Invalid input. Please re-enter operand."
  esac
}

获取运算符

接下来,定义一个函数来获取用户输入的运算符。运算符可以是加减乘除、存储结果到内存 (MS)、将结果添加到内存 (M+)、调用内存 (MR)、清除内存 (MC)、清除结果 (C) 或退出 (X)。

get_operator() {
  read -p "Enter operator: " input
  case "$input" in
    "+"|"-"|"*"|"/") operator="$input";;
    "MS") memory="$result"; echo "$result -> M";;
    "M+") memory=$((memory + result));;
    "MR") operand="$memory";;
    "MC") memory=0; echo "0 -> M";;
    "C") result=0; echo "results cleared";;
    "X") echo "Good bye."; exit 0;;
    *) echo "Invalid operator. Please re-enter operator."
  esac
}

主循环

现在,我们可以创建一个主循环,它将持续提示用户输入操作数和运算符,并执行必要的计算。

while true; do
  get_operand
  get_operator
  case "$operator" in
    "+") result=$((result + operand));;
    "-") result=$((result - operand));;
    "*") result=$((result * operand));;
    "/")
      if [ "$operand" -eq 0 ]; then
        echo "Can't divide by zero. Please re-enter divisor."
        continue
      fi
      result=$((result / operand))
      ;;
  esac
  echo "$result $operator $operand = $result"
done

完整代码

将上述代码片段组合在一起,得到完整的计算器脚本:

#!/bin/bash

result=0
memory=0
operator=

get_operand() {
  read -p "Enter operand: " input
  case "$input" in
    [0-9]*) operand="$input";;
    "MR") operand="$result";;
    "MC") memory=0; echo "0 -> M";;
    "C") result=0; echo "results cleared";;
    "X") echo "Good bye."; exit 0;;
    *) echo "Invalid input. Please re-enter operand."
  esac
}

get_operator() {
  read -p "Enter operator: " input
  case "$input" in
    "+"|"-"|"*"|"/") operator="$input";;
    "MS") memory="$result"; echo "$result -> M";;
    "M+") memory=$((memory + result));;
    "MR") operand="$memory";;
    "MC") memory=0; echo "0 -> M";;
    "C") result=0; echo "results cleared";;
    "X") echo "Good bye."; exit 0;;
    *) echo "Invalid operator. Please re-enter operator."
  esac
}

while true; do
  get_operand
  get_operator
  case "$operator" in
    "+") result=$((result + operand));;
    "-") result=$((result - operand));;
    "*") result=$((result * operand));;
    "/")
      if [ "$operand" -eq 0 ]; then
        echo "Can't divide by zero. Please re-enter divisor."
        continue
      fi
      result=$((result / operand))
      ;;
  esac
  echo "$result $operator $operand = $result"
done

使用说明

要使用此计算器,只需在 Linux 终端中运行以下命令:

bash calculator.sh

然后,按照屏幕上的说明输入操作数和运算符即可。

自定义

您可以根据自己的需要自定义此脚本。例如,您可以添加其他运算符,如百分比或幂,或者您可以将计算器扩展为处理负数。

常见问题解答

  • 问:计算器不能处理负数。如何解决?
    答:在变量初始化中将 result 初始化为 0,而不是 -1
  • 问:我输入了一个无效的运算符,但计算器没有给我提示。如何修复?
    答:在 get_operator() 函数中,使用 echo 语句打印错误消息。
  • 问:如何存储和调用计算结果?
    答:使用 MSMR 运算符存储和调用结果。
  • 问:如何清除存储的值?
    答:使用 MC 运算符清除存储的值。
  • 问:如何退出计算器?
    答:输入 X 退出计算器。