这是我的代码
#! /bin/bash
read var
if [ $var="Y" -o $var="y" ]
then
echo "YES"
else
echo "NO"
fi
如果用户按y或Y,我想打印YES,否则我想打印NO。为什么这段代码不起作用?
答案 0 :(得分:6)
基本上,你的条件是错误的。引用你的变量并在运算符之间留空格(如shellter写的)。所以看起来应该是这样的:
#! /bin/bash
read var
if [ "$var" = "Y" ] || [ "$var" = "y" ]
then
echo "YES"
else
echo "NO"
fi
编辑:用于POSIX兼容性
==
替换为=
- 请参阅评论-o
语法替换||
语法 - 请参阅注释答案 1 :(得分:4)
使用Bash,您还可以使用=~
运算符在测试中使用正则表达式:
read var
[[ "$var" =~ [Yy] ]] && echo "YES" || echo "NO"
或者正如Benjamin W.所提到的,只需使用==
运算符的字符范围:
read var
[[ "$var" == [Yy] ]] && echo "YES" || echo "NO"
答案 2 :(得分:1)
如果您只需要大写/小写比较,请对要比较的变量使用,,
运算符(请注意${var,,}
):
#!/bin/bash
read var
if [ ${var,,} = "y" ]
then
echo "YES"
else
echo "NO"
fi
或更简洁地说:
#!/bin/bash
read var
[ ${var,,} = 'y' ] && echo 'YES' || echo 'NO'
或我实际使用的方式:
#!/bin/bash
read var
[[ "${var,,}" == 'y' ]] && echo 'YES' || echo 'NO'
答案 3 :(得分:0)
您的代码中存在轻微的语法错误。
更正:运算符和变量之间应该有一个空格
read var
if [ $var = "Y" -o $var = "y" ]
then
echo "YES"
else
echo "NO"
fi
尝试上面的bash脚本。
希望它能正常工作。
快乐的编码!
答案 4 :(得分:0)
下面是我尝试的代码。
#! /bin/bash
read -p "Are you Sure?(Y/N) " answer
if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then
echo "Do your stuff."
else
echo "Do your other stuff"
fi
在'='周围添加空格,您的代码将正常运行。
#! /bin/bash
read var
if [ $var = "Y" -o $var = "y" ]
then
echo "YES"
else
echo "NO"
fi
答案 5 :(得分:0)
尝试此代码。
#! /bin/bash
read var
echo -e "YES\nNO\n" | grep -i $var