我正在 bash 中创建一个简单的计算器。用户可以输入运算符“+”、“-”、“/”和“*”。
然而,当用户输入 * 作为运算符时,它会进入最终情况。我如何确保它被正确解释为乘法情况?
尽管我有编码经验,但我对脚本/unix 很陌生。我不确定如何在最后的情况下没有 if 语句来处理这个问题,但我想避免它。谢谢
case $operator in
"+")
result=$((operand + next_operand))
;;
"-")
result=$((operand - next_operand))
;;
"*")
result=$((operand * next_operand))
;;
"/")
if [[ $next_operand -eq 0 ]]; then
echo "Can't divide by zero. Please re-enter divisor."
continue
else
result=$((operand / next_operand_value))
fi
;;
*)
echo "Invalid operator. Please re-enter operator."
continue
;;
esac
答案1
如果您不希望用户必须调整其输入以符合BASH
和/或其他 shellglobbing
标准 - 即避免globbing
,那么...
如果我遇到这个问题,我不会通过启动计算器的命令行来完成它,而是提示用户持续输入。
这并不难,但可能超出了您目前使用 shell 脚本编写的范围。但请继续听我说:
创建一个函数 - 也许称之为“提示”。
该函数设置一个变量。
当接收到输入时,它是“干净的”,也就是说,没有 shell 问题。无论用户输入什么,您都会得到。
如果你愿意的话,你可以一次走一个角色,或者一次走一条线。我建议一次一行作为入门练习。
您只需说“ read <variable>
”,其中<variable>
是您想要接收用户输入的变量的名称。
要在其前面添加文本,以便用户知道他们正在被提示,只需添加 -p 和一个字符串,如下所示:
read -p <prompt-string> <variable>
应该可以做到这一点。当然,你必须根据你的需要来制作它,但至少你的globbing
问题已经解决了。