Bash不理解超级容易if语句

时间:2015-04-15 21:04:16

标签: bash if-statement

我是一名新手,刚刚开始做一些简单的剧本。这是HackerRank的一项非常简单的任务,但是我无法理解为什么我的解决方案不起作用并相信我,我已经尝试了很多。输入只是一个字母,“' y',' Y',' n'或者' N'输出应该是“是”'为了' y'和' Y'并且没有'对于N'并且' n'。我的解决方案在这里:

read letter

if (($letter == "y"))
then
    echo "YES"
elif (($letter == "Y"))
then
    echo "YES"
else
    echo "NO"
fi

但输出仍然是“是”,即使对于随机字母,例如' G'什么的我不知道这个疯狂的bash如何运作,请有人向我解释一下!

2 个答案:

答案 0 :(得分:7)

((...))用于算术运算。对于字符串比较,请使用[[ ... ]][ ... ]test。 (注意括号内的空格。它们不是可选的。)

if [[ $letter == "y" ]]
then
    echo "YES"
elif [[ $letter == "Y" ]]
then
    echo "YES"
else
    echo "NO"
fi

您也可以使用case块执行此操作。

case $letter in
    [yY]) echo "YES";;
    *)    echo "NO";;
esac

答案 1 :(得分:3)

您的语法不正确。

你应该这样做:

if [ "$letter" == "y" ] # for posix compliance, use = instead of ==
   #do stuff
fi