我想在 bash 中编写一个脚本,它检查用户输入是否等于“stringA”或“stringB”,如果它等于这些字符串之一,它应该打印用户输入。我的代码是:
#!/bin/bash
echo "Please enter your choice (stringA or stringB): "
read result
while [[ (${result,,} != 'stringa') || (${result,,} != 'stringb') ]]; do
echo Please enter only stringA or stringB:
read result
done
echo "You have selected $result!"
exit
不幸的是,这段代码不起作用并无限循环。我只能比较是否$result
等于删除||
while循环的第二部分的字符串之一。我尝试替换为||
,-o
但出现以下错误:
./chk.sh: line 12: syntax error in conditional expression
./chk.sh: line 12: syntax error near `-o'
./chk.sh: line 12: `while [[ (${result,,} != 'stringa') -o (${result,,} != 'stringb') ]]; do'
那是因为你想使用
&&
,而不是||
。如果结果不是 stringA 并且不是 stringB,则您想重复循环。没有字符串可以等于它们两者,这将结束您的循环。
您还可以在中使用模式
[[ ... ]]
:在 textspeech 而不是结果是 stringa 或结果是 stringb 做...
请注意您的变量,否则如果 var为空
"
,您将收到错误消息。$result
您的代码中的问题是您的循环循环 while
$result
与and (同时 )不同。您可能想使用stringA
stringB
或者
要让用户从几个选项中选择一个,不要让他们输入长字符串。相反,为他们提供一个简单的菜单供他们选择。
建议:
运行这个:
一种
sh
变体,将消除与${var,,}
使用语言环境转换字符串相关的问题(例如,小写I
并不i
适合所有人):