在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命令:
- 按
Ctrl+C终止当前输入 - 修改脚本中的错误行
- 重新运行脚本
四、调试技巧与最佳实践
4.1 调试技巧
- 添加调试信息:
echo "Debug: type=$type, number1=$number1, number2=$number2"
- 检查变量值:
set -x # 开启调试模式
set +x # 关闭调试模式
4.2 最佳实践
- 变量命名:使用有意义的变量名,避免拼写错误
- 代码格式化:保持一致的缩进和代码风格
- 错误处理:对用户输入进行充分验证
- 注释说明:重要逻辑添加注释
4.3 改进建议
# 使用更现代的算术运算语法
myAnswer=$((number1 + number2))
# 添加输入验证
if ! [[ "$number1" =~ ^[0-9]+$ ]]; then
echo "Error: Please enter a valid number"
continue
fi
五、总结
通过这个四则运算计算器的实现,我们学习了:
- Shell脚本的基本结构和语法
- 条件判断和循环控制
- 用户交互和输入处理
- 常见的编程错误和调试方法
- 代码优化和最佳实践
掌握这些基础知识对于Shell脚本编程至关重要,希望大家在实践中不断积累经验,提高编程能力。
2648

被折叠的 条评论
为什么被折叠?



