我正在开始使用bash,并且在if语句方面遇到麻烦。 为什么使用以下脚本:
#!/bin/bash
read C
if (( $C == 'Y' )) ; then
echo "YES"
elif (( $C == 'N' )) ; then
echo "NO"
fi
无论YES
取什么值,似乎都可以打印$C
。
答案 0 :(得分:3)
算术语句((...))
中的字符串将递归扩展,直到获得整数值(对于未定义的参数包括0)或导致语法错误的字符串。一些例子:
# x expands to y, and y expands to 3
$ x=y y=3
$ (( x == 3 )) && echo true
true
$ x="foo bar"
$ (( x == 3 ))
bash: ((: foo bar: syntax error in expression (error token is "bar")
# An undefined parameter expands to 0
$ unset x
$ (( x == 0 )) && echo true
true
在您的情况下,$C
扩展为一些未定义的参数名称,并且它和Y
均扩展为0,并且0 == 0。
要进行字符串比较,请改用[[ ... ]]
。
if [[ $C == Y ]]; then
答案 1 :(得分:1)
是的,正如@larsks所提到的,您需要方括号。试试这个完整版本:
#!/bin/bash
read C
if [[ ${C} == 'Y' ]]; then
echo "YES"
elif [[ ${C} == 'N' ]]; then
echo "NO"
fi
答案 2 :(得分:1)
这是正确的格式。
#!/bin/bash
read C
if [[ $C == 'Y' ]]
then
echo "YES"
elif [[ $C == 'N' ]]
then
echo "NO"
fi