尝试编写一个脚本,该脚本将读取用户输入的内容...我知道它是基本的,但是我坚持第一个如果...
echo "Please enter yes or no (y/n)?"
read string
if [ $string = "y" -o "n" ]
then
echo "User selected $string"
else
echo "You didn't enter y/n !!!"
fi
我希望如果[$ backup =" y"或" n" ]
有什么想法吗?
答案 0 :(得分:3)
在bash
中使用此语法:
if [ "a string" = "another one" ] ; then
# Whatever
fi
对于OR
等多个条件语句,请使用:
if [ "a string" = "another one" ] || [ "$foo" = "bar" ] ; then
# Whatever
fi
bash
也支持非标准[[ ... ]]
表达式,它可以使用单个命令处理复合比较,而不是2 [
个命令:
if [[ "a string" = "another one" || $foo = "bar" ]]; then
# Whatever
fi
答案 1 :(得分:3)
不是你实际问过的问题,但是......你告诉用户输入“是”或“否”但只测试y或n - 当然,你给了他们一个提示,但是用户有提示。因此,可能需要进行更宽松的测试:
echo "Please enter yes or no (y/n)"
read string
case "$string" in
[yY]* | [nN]*) echo "User entered $string" ;;
*) echo "I don't understand '$string'" ;;
esac
这将识别以Y或N开头的任何变化 - 通常这是足够好的,但你可以收紧测试。此外,既然你可能想要做一些不同的回答,你可以扩展案例(我也收紧了这个案例):
case "$string" in
[yY] | [yY][eE][sS]) echo "Here's where you process yes" ;;
[nN] | [nN][oO]) echo "And here you deal with no" ;;
*) echo "I don't understand '$string'" ;;
esac
您可以使用if语句执行此操作,但如果可能有两种以上的替代方法,并且测试适合于大小写语法,我会发现案例更具可读性。
答案 2 :(得分:0)
您也可以尝试:
echo "Please enter yes or no (y/n)?"
read string
if [[ "$string" =~ ^(y|n)$ ]]
then
echo "User selected $string"
else
echo "You didn't enter y/n !!!"
fi
答案 3 :(得分:0)
我很好的解决方案是case
,如果你想让你的输入更复杂,这更容易扩展
case $string in
y|n) echo "User selected $string"
;;
*) echo "You didn't enter y/n !!!"
;;
esac
从那里你可以轻松修改它以接受大写或其他:
case $string in
y|Y) echo "yes, Sir!"
;;
n|N) echo "No, can't do"
;;
*) echo "Say what?"
;;
esac
查看case statements了解详情。