如何在bash脚本中进行字符比较?

时间:2016-09-17 18:59:13

标签: bash shell

这是我的代码

#! /bin/bash
read var
if [ $var="Y" -o $var="y" ]
then
    echo "YES"
else
    echo "NO"
fi

如果用户按y或Y,我想打印YES,否则我想打印NO。为什么这段代码不起作用?

6 个答案:

答案 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