我想使用 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 不足以满足高端应用程序的需求,它适合与基本系统命令交互,但仅此而已。