在 shell 脚本中处理用户输入的 * 大小写

在 shell 脚本中处理用户输入的 * 大小写

我正在 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问题已经解决了。

相关内容