Unix Bash如果else语句不起作用

时间:2014-02-03 15:12:53

标签: bash shell unix cmd

如果仅使用IF条件,我可以在命令提示符下得到答案。 但是如果添加elif,命令提示符仍然是打开的&没有结束......

我用的代码......

-bash-3.00$ if [ "1" == "1" && "$cont" == "1" ]; then
> echo "I am if"
> elif [ "$cont" == "1"" ]; then
> echo "I am else"
> fi
>
>

预期输出它应该结束&返回回声;

2 个答案:

答案 0 :(得分:3)

您可以将&&更改为-a

$ cont=1
$ if [ "1" = "1" -a "$cont" = "1" ]; then echo "ha"; fi
ha

或者使用两个单独的[命令:

$ if [ "1" = "1" ] && [ "$cont" = "1" ]; then echo "ha"; fi

或使用双括号:

$ if [[ "1" == "1" && "$cont" == "1" ]]; then echo "ha"; fi
ha

另请注意,"你的elif中有{{1}}太多,RedX comments

答案 1 :(得分:2)

elif [ "$cont" == "1"" ]; then无效;报价必须成对出现:

elif [ "$cont" == "1" ]; then

给你:

if [ "1" == "1" && "$cont" == "1" ]; then
echo "I am if"
elif [ "$cont" == "1" ]; then
echo "I am else"
fi

bash: [: missing ']'

失败

原因是第一行。您正在使用单[,这意味着BASH会看到:

if [ "1" == "1"
pipe (&&)
"$cont" == "1" ]; then

尝试

if [[ "1" == "1" && "$cont" == "1" ]]; then
echo "I am if"
elif [[ "$cont" == "1" ]]; then
echo "I am else"
fi

单个[是Bourne shell时间的旧 bug 功能。它们产生了各种问题,这些问题都是用[[...]]语法解决的。

除非您知道自己在做什么,否则请避免使用单[和反引号语法(而是使用$(cmd...))。

提示:要调试这样的事情,请使用set -x让shell打印每个命令。