玩转Shell:四则运算计算器开发指南

在Linux Shell脚本编程学习中,实现一个简单的四则运算计算器是很好的练习项目。本文将详细分析一个计算器脚本的实现过程,重点讲解常见的错误和调试技巧。

一、最终完整代码

#!/bin/bash

echo "Hello! @_@"
echo "Welcome to the calculate testing!"
echo "You can input an expression such as 2*2 or 3+1, and input the answer"
echo "I will tell you whether you are right or wrong."
echo "You can input 'q' to exit."
echo "Now let's begin!"

number1=0
while [ "$number1" != "q" ]; do
    echo "Input the first number:"
    read number1
    if [ "$number1" = "q" ]; then
        echo "Goodbye!"
        break
    fi
    
    echo "Input the operator type (+, -, *, /):"
    read type
    
    echo "Input the second number:"
    read number2
    
    echo "Input your answer:"
    read yourAnswer

    case $type in
        +) myAnswer=$(expr $number1 + $number2);;
        -) myAnswer=$(expr $number1 - $number2);;
        \*) myAnswer=$(expr $number1 \* $number2);;
        /)
            if [ $number2 -eq 0 ]
            then
                echo "Sorry! :-("
                echo "0 cannot be the divisor"
                continue 
            else
                myAnswer=$(expr $number1 / $number2)
            fi
        ;;
        *)
            echo "Error! Invalid operator!"
            continue
        ;;
    esac

    if [ $myAnswer -eq $yourAnswer ]
    then 
        echo ":-) Congratulations!"
        echo "You are right!"
        echo "Input 'q' to exit or try again!"
    else
        echo ":-(" Sorry!
        echo "You are wrong!"
        echo "The right answer is:"
        echo "$number1 $type $number2 = $myAnswer"
        echo "Input 'q' to exit or try again!"    
    fi
    echo ""
done

二、代码功能解析

2.1 程序结构

  • 交互式界面:友好的提示信息
  • 循环机制:支持连续计算,输入’q’退出
  • 四则运算:支持加、减、乘、除
  • 错误处理:除零保护、运算符验证
  • 答案验证:自动判断答案正确性

2.2 关键语法说明

# 变量赋值(等号两边不能有空格)
number1=0

# 字符串比较
[ "$number1" != "q" ]

# case语句模式匹配
case $type in
    +) command;;
    -) command;;
esac

# 算术运算(两种方式)
myAnswer=$(expr $number1 + $number2)
myAnswer=$((number1 + number2))

三、常见错误与分析

3.1 变量名拼写错误

错误代码:

case $typr in  # 错误:变量名拼写错误

问题分析:

  • 原意是使用$type变量
  • 误写为$typr导致变量不存在
  • 在case语句中总是匹配到*)默认分支
  • 结果:无论输入什么运算符都显示"Error! Invalid operator!"

修正:

case $type in  # 正确:使用正确的变量名

3.2 算术运算逻辑错误

错误代码:

-) myAnswer=$(expr $number1 + $number2);;  # 错误:减法写成了加法

问题分析:

  • 减法运算符对应了加法运算
  • 导致计算结果完全错误
  • 用户输入减法却得到加法结果

修正:

-) myAnswer=$(expr $number1 - $number2);;  # 正确:使用减法运算

3.3 变量引用错误

错误代码:

\*) myAnswer=$(expr $number \* $number2);;  # 错误:变量名不完整

问题分析:

  • $number应该是$number1
  • 变量不存在导致运算失败
  • 乘法功能无法正常工作

修正:

\*) myAnswer=$(expr $number1 \* $number2);;  # 正确:使用完整变量名

3.4 read命令使用错误

错误代码:

read your Answer  # 错误:变量名包含空格

问题分析:

  • Shell会将your Answer识别为两个变量
  • 第一个输入赋给your,第二个输入赋给Answer
  • 导致后续判断逻辑混乱

修正:

read yourAnswer  # 正确:变量名无空格

补救措施:
如果不小心输入了错误的read命令:

  1. Ctrl+C终止当前输入
  2. 修改脚本中的错误行
  3. 重新运行脚本

四、调试技巧与最佳实践

4.1 调试技巧

  1. 添加调试信息
echo "Debug: type=$type, number1=$number1, number2=$number2"
  1. 检查变量值
set -x  # 开启调试模式
set +x  # 关闭调试模式

4.2 最佳实践

  1. 变量命名:使用有意义的变量名,避免拼写错误
  2. 代码格式化:保持一致的缩进和代码风格
  3. 错误处理:对用户输入进行充分验证
  4. 注释说明:重要逻辑添加注释

4.3 改进建议

# 使用更现代的算术运算语法
myAnswer=$((number1 + number2))

# 添加输入验证
if ! [[ "$number1" =~ ^[0-9]+$ ]]; then
    echo "Error: Please enter a valid number"
    continue
fi

五、总结

通过这个四则运算计算器的实现,我们学习了:

  • Shell脚本的基本结构和语法
  • 条件判断和循环控制
  • 用户交互和输入处理
  • 常见的编程错误和调试方法
  • 代码优化和最佳实践

掌握这些基础知识对于Shell脚本编程至关重要,希望大家在实践中不断积累经验,提高编程能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值