脚本看起来像这样:
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语句中
答案 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。