在 Bash 脚本中存储用户输入的正确方法

在 Bash 脚本中存储用户输入的正确方法

我想使用 bash 制作一个聊天机器人。我只是想知道社区中是否有人知道将用户输入存储为 shell 脚本中的变量的正确/首选方法。

例如:如果我的聊天机器人无法识别对它的请求,是否有办法要求用户在将来向程序提供正确答案,然后将该答案存储为变量,而无需手动编辑脚本?

也许使用读取命令或者类似的命令?

答案1

Bash 并不是编写高级应用程序的首选语言。它的优势在于与系统命令交互和自动化,而不是实现复杂的业务逻辑或执行网络等操作。通过寻找更合适的语言(例如 Python),您可以让生活更轻松。无论如何,当然可以使用 Bash 做到这一点,只是更困难,尤其是对于初学者而言。

所以回到您的实际问题,是的,您可以使用 shellread内置函数来请求用户输入并将其存储在 shell 变量中,例如:

read line 
echo "You said <$line>"

示例运行,包括用户输入:

Hello there                                    ← this is user input
You said <Hello there>                         ← this is the output

使用这两个命令,我首先等待一行用户输入并将其存储在我称为的变量中$line。然后我可以使用第二个命令再次输出该变量。

键入以获取该命令及其可用选项help read的完整描述。read


您可以在循环中使用它来验证输入并继续询问直到答案可以接受:

while [[ "$my_color" != "blue" && "$my_color" != "red" ]] ; do 
    read -p "Pick blue or red: " my_color
done
echo "You picked $my_color."

示例运行,包括用户输入:

Pick blue or red: green
Pick blue or red: 
Pick blue or red: red
You picked red.

不过,还有更优雅的方式来编写菜单,让你可以在多个预定义选项之间进行选择,例如使用select。请参阅如何在 shell 脚本中创建选择菜单?了解更多信息。

答案2

您可以查看一些有关如何在 bash 中制作选择菜单的指南。但是,我和其他开发人员/系统管理员遵循以下规则:如果脚本长度超过 200 行,则用 python/perl/其他语言重写,而不是 bash。Bash 不足以满足高端应用程序的需求,它适合与基本系统命令交互,但仅此而已。

相关内容