BASH - 简单的if语句不起作用

时间:2014-10-05 19:07:00

标签: bash shell

脚本看起来像这样:

echo -e ""
read text

if [[ $text > 0 && $text < 3 ]]; then
        if[ $text == "0" ];
    then
        echo "Number is 0"
    fi
else
    echo "Number is odd"
fi
echo "You entered: $text"

我有错误:

  

./ build.sh:line 11:意外令牌then' ./build.sh: line 11:附近的语法错误然后&#39;

任何想法我想做的事情我想要简单如果在其他If语句中

1 个答案:

答案 0 :(得分:4)

替换

if[ $text == "0" ];

使用

if [ $text == "0" ];

bash看到它时,前一个语句是尝试使用参数if[$text==和{{}执行命令"0" 1}}。由于]不是if[,因此它不会将该行识别为if语句的开头。因此,后面的if是“意外的”。

除了then命令

之外

顺便说一句,您使用test命令的较早[和更现代[[形式。如果您是test的新用户,您可能希望坚持使用bash语法,因为它提供的意外较少。旧版[[形式的唯一优势是它提供了与其他shell的兼容性,尤其是[,这是类似debian的系统上的默认dash

但是,这两种形式都有一些惊喜。例如,/bin/sh<不是数字比较。相反,正如>所解释的那样,“使用当前语言环境按字典顺序排序”。因此,在我的语言环境下,例如,以下语句返回true

man bash

如果要进行数值比较,请使用运算符[[ -1 > 0 ]] 大于。因此,以下内容返回false:

-gt

其他数字比较运算符为[[ -1 -gt 0 ]] -eq-ne-lt-le

有关-ge[的详细讨论,请参阅Greg's BashFAQ